| gs.ar[ls.n] = ls.e ∨ gs.ar[ls.n] = ⊥ ∨ (ls.n + 1) % ls.sz = ls.n0, # gs.ar ≠ 0 ∧ htok(gs.ar), # gs0.ar ≠ 0 ∧ htok(gs0.ar), lsf(tid) = ls, lsf0(tid) = ls0, alsf(tid) = als, alsf(tid).tid = tid, lsf(tid).tid = tid, ∀ tid0. tid0 ≠ tid → lsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → alsf(tid0).tid = tid0, pcf(tid) = M6, pcf0(tid) = M7, apcf(tid) = apc, ls.n < # gs.ar ∧ ls.e ≠ ⊥ ∧ ls.sz = # gs.ar ∧ (ls.n0 < # gs.ar ∧ ls.n0 = get_hash(ls.e, ls.sz)) ∧ ¬ ls.b ∧ allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false), ls0.n < # gs0.ar ∧ ls0.e ≠ ⊥ ∧ ls0.sz = # gs0.ar ∧ (ls0.n0 < # gs0.ar ∧ ls0.n0 = get_hash(ls0.e, ls0.sz)) ∧ ¬ ls0.b ∧ (ls0.e0 ≠ ⊥ → ls0.e0 = gs0.ar[ls0.n]) ∧ allslotsfull(gs0.ar, ls0.n0, ls0.n, ls0.e, false), SetLInv(ags, als, apc), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), pre(ags, als, apc, ADoMember(ls.tid)) → ags0 = gstepf(ags, als, apc, ADoMember(ls.tid)) ∧ als0 = lstepf(ags, als, apc, ADoMember(ls.tid)) ∧ apc0 = pcstepf(ags, als, apc, ADoMember(ls.tid)), pre(gs, ls, M6, doMEMBER(ls.tid)) ∧ gs0 = gstepf(gs, ls, M6, doMEMBER(ls.tid)) ∧ ls0 = lstepf(gs, ls, M6, doMEMBER(ls.tid)) ∧ M7 = pcstepf(gs, ls, M6, doMEMBER(ls.tid)), absset(gs.ar, ags.set), ls.tid = als.tid ∧ apc = invMember ∧ (apc = invMember ∨ apc = invInsert → ls.e = als.le) ⊦ pre(ags, als, apc, ADoMember(ls.tid)) ∧ absset(gs0.ar, ags0.set) ∧ ls0.tid = als0.tid ∧ apc0 = (ls0.e0 ≠ ls0.e ∧ ls0.e0 ≠ ⊥ ∧ (ls0.n + 1) % # gs0.ar ≠ ls0.n0 ⊃ invMember;retMember) ∧ (ls0.e0 = ls0.e ∨ ls0.e0 = ⊥ ∨ (ls0.n + 1) % # gs0.ar = ls0.n0 → (ls0.e = ls0.e0 ↔ als0.lb)) ∧ (apc0 = invMember ∨ apc0 = invInsert → ls0.e = als0.le) |
ls0.n0 = get_hash(ls0.e, ls0.sz), ls.n0 = get_hash(ls.e, ls.sz), ls0.sz = # gs0.ar, ls.sz = # gs.ar, ls.tid = als.tid, lsf(tid).tid = tid, alsf(tid).tid = tid, M7 = pcstepf(gs, ls, M6, doMEMBER(ls.tid)), alsf(tid) = als, apc = invMember, apcf(tid) = apc, gs0 = gstepf(gs, ls, M6, doMEMBER(ls.tid)), ls0 = lstepf(gs, ls, M6, doMEMBER(ls.tid)), lsf(tid) = ls, lsf0(tid) = ls0, pcf(tid) = M6, pcf0(tid) = M7, # gs.ar ≠ 0, # gs0.ar ≠ 0, ls.e ≠ ⊥, ls0.e ≠ ⊥, ls0.n < # gs0.ar, ls0.n0 < # gs0.ar, ls.n < # gs.ar, ls.n0 < # gs.ar, SetLInv(ags, als, apc), absset(gs.ar, ags.set), allslotsfull(gs0.ar, ls0.n0, ls0.n, ls0.e, false), allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false), htok(gs0.ar), htok(gs.ar), pre(gs, ls, M6, doMEMBER(ls.tid)), ¬ ls.b, ¬ ls0.b, apc = invMember ∨ apc = invInsert → ls.e = als.le, pre(ags, als, apc, ADoMember(ls.tid)) → ags0 = gstepf(ags, als, apc, ADoMember(ls.tid)) ∧ als0 = lstepf(ags, als, apc, ADoMember(ls.tid)) ∧ apc0 = pcstepf(ags, als, apc, ADoMember(ls.tid)), ls0.e0 ≠ ⊥ → ls0.e0 = gs0.ar[ls0.n], ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. tid0 ≠ tid → alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → lsf(tid0).tid = tid0, gs.ar[ls.n] = ls.e ∨ gs.ar[ls.n] = ⊥ ∨ (ls.n + 1) % ls.sz = ls.n0 ⊦ pre(ags, als, apc, ADoMember(ls.tid)) ∧ absset(gs0.ar, ags0.set) ∧ ls0.tid = als0.tid ∧ apc0 = (ls0.e0 ≠ ls0.e ∧ ls0.e0 ≠ ⊥ ∧ (ls0.n + 1) % # gs0.ar ≠ ls0.n0 ⊃ invMember;retMember) ∧ (ls0.e0 = ls0.e ∨ ls0.e0 = ⊥ ∨ (ls0.n + 1) % # gs0.ar = ls0.n0 → (ls0.e = ls0.e0 ↔ als0.lb)) ∧ (apc0 = invMember ∨ apc0 = invInsert → ls0.e = als0.le)
| ls0.n0 = get_hash(ls0.e, ls0.sz), ls.n0 = get_hash(ls.e, ls.sz), ls0.sz = # gs0.ar, ls.sz = # gs.ar, ls.tid = als.tid, lsf(tid).tid = tid, alsf(tid).tid = tid, M7 = pcstepf(gs, ls, M6, doMEMBER(ls.tid)), alsf(tid) = als, apc = invMember, apcf(tid) = apc, gs0 = gstepf(gs, ls, M6, doMEMBER(ls.tid)), ls0 = lstepf(gs, ls, M6, doMEMBER(ls.tid)), lsf(tid) = ls, lsf0(tid) = ls0, pcf(tid) = M6, pcf0(tid) = M7, # gs.ar ≠ 0, # gs0.ar ≠ 0, ls.e ≠ ⊥, ls0.e ≠ ⊥, ls0.n < # gs0.ar, ls0.n0 < # gs0.ar, ls.n < # gs.ar, ls.n0 < # gs.ar, SetLInv(ags, als, apc), absset(gs.ar, ags.set), allslotsfull(gs0.ar, ls0.n0, ls0.n, ls0.e, false), allslotsfull(gs.ar, ls.n0, ls.n, ls.e, false), htok(gs0.ar), htok(gs.ar), pre(gs, ls, M6, doMEMBER(ls.tid)), ¬ ls.b, ¬ ls0.b, apc = invMember ∨ apc = invInsert → ls.e = als.le, pre(ags, als, apc, ADoMember(ls.tid)) → ags0 = gstepf(ags, als, apc, ADoMember(ls.tid)) ∧ als0 = lstepf(ags, als, apc, ADoMember(ls.tid)) ∧ apc0 = pcstepf(ags, als, apc, ADoMember(ls.tid)), ls0.e0 ≠ ⊥ → ls0.e0 = gs0.ar[ls0.n], ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. tid0 ≠ tid → alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → lsf(tid0).tid = tid0, gs.ar[ls.n] = ls.e ∨ gs.ar[ls.n] = ⊥ ∨ (ls.n + 1) % ls.sz = ls.n0 ⊦ pre(ags, als, apc, ADoMember(ls.tid)) ∧ absset(gs0.ar, ags0.set) ∧ ls0.tid = als0.tid ∧ apc0 = (ls0.e0 ≠ ls0.e ∧ ls0.e0 ≠ ⊥ ∧ (ls0.n + 1) % # gs0.ar ≠ ls0.n0 ⊃ invMember;retMember) ∧ (ls0.e0 = ls0.e ∨ ls0.e0 = ⊥ ∨ (ls0.n + 1) % # gs0.ar = ls0.n0 → (ls0.e = ls0.e0 ↔ als0.lb)) ∧ (apc0 = invMember ∨ apc0 = invInsert → ls0.e = als0.le) |
lsf(tid).e = alsf(tid).le, lsf(tid).n0 = get_hash(alsf(tid).le, # gs.ar), lsf0(tid).n0 = get_hash(lsf0(tid).e, # gs.ar), lsf(tid).sz = # gs.ar, lsf0(tid).sz = # gs.ar, alsf(tid).tid = tid, lsf(tid).tid = tid, apcf(tid) = invMember, lsf0(tid) = lsf(tid).e0:= gs.ar[lsf(tid).n], pcf(tid) = M6, pcf0(tid) = M7, lsf0(tid).e ≠ ⊥, alsf(tid).le ≠ ⊥, lsf(tid).n0 < # gs.ar, lsf(tid).n < # gs.ar, lsf0(tid).n0 < # gs.ar, lsf0(tid).n < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, lsf(tid).n0, lsf(tid).n, alsf(tid).le, false), allslotsfull(gs.ar, lsf0(tid).n0, lsf0(tid).n, lsf0(tid).e, false), htok(gs.ar), ¬ lsf(tid).b, ¬ lsf0(tid).b, lsf0(tid).e0 ≠ ⊥ → lsf0(tid).e0 = gs.ar[lsf0(tid).n], ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), gs.ar[lsf(tid).n] = alsf(tid).le ∨ gs.ar[lsf(tid).n] = ⊥ ∨ (lsf(tid).n + 1) % # gs.ar = lsf(tid).n0 ⊦ lsf0(tid).tid = tid ∧ (lsf0(tid).e0 = lsf0(tid).e ∨ lsf0(tid).e0 = ⊥ ∨ (lsf0(tid).n + 1) % # gs.ar = lsf0(tid).n0) ∧ (lsf0(tid).e = lsf0(tid).e0 ↔ alsf(tid).le ∈ ags.set) ∧ (lsf0(tid).e0 ≠ lsf0(tid).e ∧ lsf0(tid).e0 ≠ ⊥ ∧ (lsf0(tid).n + 1) % # gs.ar ≠ lsf0(tid).n0 → lsf0(tid).e = alsf(tid).le)
Used simplifier rules: ⊦ (ls.lb:= lb).le = ls.le; (s) ⊦ (ls.lb:= lb).lb ↔ lb; (s) ⊦ invMember ≠ retMember; (s) ⊦ (ls.lb:= lb).tid = ls.tid; (s) ⊦ ADoMember(tid) = ADoMember(tid0) ↔ tid = tid0; (s) ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s) ⊦ ls.tid = tid → pcstepf(gs, ls, invMember, ADoMember(tid)) = retMember; (s) ⊦ ls.tid = tid → lstepf(gs, ls, invMember, ADoMember(tid)) = ls.lb:= (ls.le ∈ gs.set); (s) ⊦ ls.tid = tid → gstepf(gs, ls, invMember, ADoMember(tid)) = 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 ⊦ invInsert ≠ retMember; (s) ⊦ invInsert ≠ invMember; (s) ⊦ gstepf(gs, ls, M6, a) = gs; (s) ⊦ doMEMBER(tid) = doMEMBER(tid0) ↔ tid = tid0; (s) ⊦ pre(gs, ls, M6, a) ↔ a = (gs.ar[ls.n] = ls.e ∨ gs.ar[ls.n] = ⊥ ∨ (ls.n + 1) % ls.sz = ls.n0 ⊃ doMEMBER(ls.tid) ;τ ); (s) ⊦ pcstepf(gs, ls, M6, a) = M7; (s) ⊦ lstepf(gs, ls, M6, a) = ls.e0:= gs.ar[ls.n]; (s)
| lsf(tid).e = alsf(tid).le, lsf(tid).n0 = get_hash(alsf(tid).le, # gs.ar), lsf0(tid).n0 = get_hash(lsf0(tid).e, # gs.ar), lsf(tid).sz = # gs.ar, lsf0(tid).sz = # gs.ar, alsf(tid).tid = tid, lsf(tid).tid = tid, apcf(tid) = invMember, lsf0(tid) = lsf(tid).e0:= gs.ar[lsf(tid).n], pcf(tid) = M6, pcf0(tid) = M7, lsf0(tid).e ≠ ⊥, alsf(tid).le ≠ ⊥, lsf(tid).n0 < # gs.ar, lsf(tid).n < # gs.ar, lsf0(tid).n0 < # gs.ar, lsf0(tid).n < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, lsf(tid).n0, lsf(tid).n, alsf(tid).le, false), allslotsfull(gs.ar, lsf0(tid).n0, lsf0(tid).n, lsf0(tid).e, false), htok(gs.ar), ¬ lsf(tid).b, ¬ lsf0(tid).b, lsf0(tid).e0 ≠ ⊥ → lsf0(tid).e0 = gs.ar[lsf0(tid).n], ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), gs.ar[lsf(tid).n] = alsf(tid).le ∨ gs.ar[lsf(tid).n] = ⊥ ∨ (lsf(tid).n + 1) % # gs.ar = lsf(tid).n0 ⊦ lsf0(tid).tid = tid ∧ (lsf0(tid).e0 = lsf0(tid).e ∨ lsf0(tid).e0 = ⊥ ∨ (lsf0(tid).n + 1) % # gs.ar = lsf0(tid).n0) ∧ (lsf0(tid).e = lsf0(tid).e0 ↔ alsf(tid).le ∈ ags.set) ∧ (lsf0(tid).e0 ≠ lsf0(tid).e ∧ lsf0(tid).e0 ≠ ⊥ ∧ (lsf0(tid).n + 1) % # gs.ar ≠ lsf0(tid).n0 → lsf0(tid).e = alsf(tid).le) |
lsf0(tid).n0 = get_hash(lsf0(tid).e, # gs.ar), lsf0(tid).sz = # gs.ar, alsf(tid).tid = tid, apcf(tid) = invMember, ¬ b, e = alsf(tid).le, lsf(tid) = mkls(tid1, e, b, n, n0, n1, e0), lsf0(tid) = lsf(tid).e0:= gs.ar[n1], n = # gs.ar, n0 = get_hash(alsf(tid).le, # gs.ar), pcf(tid) = M6, pcf0(tid) = M7, tid1 = tid, lsf0(tid).e ≠ ⊥, alsf(tid).le ≠ ⊥, lsf0(tid).n < # gs.ar, lsf0(tid).n0 < # gs.ar, n1 < # gs.ar, n0 < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, lsf0(tid).n0, lsf0(tid).n, lsf0(tid).e, false), allslotsfull(gs.ar, n0, n1, alsf(tid).le, false), htok(gs.ar), ¬ lsf0(tid).b, lsf0(tid).e0 ≠ ⊥ → lsf0(tid).e0 = gs.ar[lsf0(tid).n], ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = n0 ⊦ lsf0(tid).tid = tid ∧ (lsf0(tid).e0 = lsf0(tid).e ∨ lsf0(tid).e0 = ⊥ ∨ (lsf0(tid).n + 1) % # gs.ar = lsf0(tid).n0) ∧ (lsf0(tid).e = lsf0(tid).e0 ↔ alsf(tid).le ∈ ags.set) ∧ (lsf0(tid).e0 ≠ lsf0(tid).e ∧ lsf0(tid).e0 ≠ ⊥ ∧ (lsf0(tid).n + 1) % # gs.ar ≠ lsf0(tid).n0 → lsf0(tid).e = alsf(tid).le)
Used simplifier rules: ⊦ (((((tid = ls.tid ∧ e = ls.e) ∧ (b ↔ ls.b)) ∧ sz = ls.sz) ∧ sz0 = ls.n0) ∧ n = ls.n) ∧ e0 = ls.e0 ↔ ls = mkls(tid, e, b, sz, sz0, n, e0); (elim) Used terms: lsf(tid), b, tid1, n0, e0, e, n, n1
| lsf0(tid).n0 = get_hash(lsf0(tid).e, # gs.ar), lsf0(tid).sz = # gs.ar, alsf(tid).tid = tid, apcf(tid) = invMember, ¬ b, e = alsf(tid).le, lsf(tid) = mkls(tid1, e, b, n, n0, n1, e0), lsf0(tid) = lsf(tid).e0:= gs.ar[n1], n = # gs.ar, n0 = get_hash(alsf(tid).le, # gs.ar), pcf(tid) = M6, pcf0(tid) = M7, tid1 = tid, lsf0(tid).e ≠ ⊥, alsf(tid).le ≠ ⊥, lsf0(tid).n < # gs.ar, lsf0(tid).n0 < # gs.ar, n1 < # gs.ar, n0 < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, lsf0(tid).n0, lsf0(tid).n, lsf0(tid).e, false), allslotsfull(gs.ar, n0, n1, alsf(tid).le, false), htok(gs.ar), ¬ lsf0(tid).b, lsf0(tid).e0 ≠ ⊥ → lsf0(tid).e0 = gs.ar[lsf0(tid).n], ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = n0 ⊦ lsf0(tid).tid = tid ∧ (lsf0(tid).e0 = lsf0(tid).e ∨ lsf0(tid).e0 = ⊥ ∨ (lsf0(tid).n + 1) % # gs.ar = lsf0(tid).n0) ∧ (lsf0(tid).e = lsf0(tid).e0 ↔ alsf(tid).le ∈ ags.set) ∧ (lsf0(tid).e0 ≠ lsf0(tid).e ∧ lsf0(tid).e0 ≠ ⊥ ∧ (lsf0(tid).n + 1) % # gs.ar ≠ lsf0(tid).n0 → lsf0(tid).e = alsf(tid).le) |
alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦
Used simplifier rules: ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).e = e; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).n0 = sz0; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).n = sz1; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).e0 = e0; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).tid = tid; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).b ↔ b; (s) ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).sz = sz; (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 ⊦ mkls(tid, e, b, sz, sz0, sz1, e0).e0:= e2 = mkls(tid, e, b, sz, sz0, sz1, e2); (s)
| alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), absset(gs.ar, ags.set), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦ |
⊦ absset(ar, set) ↔ (∀ e. e ∈ set ↔ (∃ n. n < # ar ∧ e = ar[n] ∧ e ≠ ⊥))
alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ e ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦
Used terms: gs.ar, ags.set
| ⊦ absset(ar, set) ↔ (∀ e. e ∈ set ↔ (∃ n. n < # ar ∧ e = ar[n] ∧ e ≠ ⊥)) |
| alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ e ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦ |
alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦
| alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦ |
alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦
Used terms: alsf(tid).le
| alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦ |
alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦
| alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), gs.ar[n1] = alsf(tid).le ∨ gs.ar[n1] = ⊥ ∨ (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar) ⊦ |
alsf(tid).tid = tid, gs.ar[n1] = alsf(tid).le, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦
alsf(tid).tid = tid, gs.ar[n1] = ⊥, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦
(n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦
| alsf(tid).tid = tid, gs.ar[n1] = alsf(tid).le, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ |
alsf(tid).tid = tid, gs.ar[n1] = alsf(tid).le, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, gs.ar[n1] ≠ ⊥, get_hash(gs.ar[n1], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1], false), htok(gs.ar), ¬ gs.ar[n1] ∈ ags.set, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ ∃ n. n < # gs.ar ∧ gs.ar[n1] = gs.ar[n] ∧ gs.ar[n] ≠ ⊥
| alsf(tid).tid = tid, gs.ar[n1] = alsf(tid).le, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, gs.ar[n1] ≠ ⊥, get_hash(gs.ar[n1], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1], false), htok(gs.ar), ¬ gs.ar[n1] ∈ ags.set, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ ∃ n. n < # gs.ar ∧ gs.ar[n1] = gs.ar[n] ∧ gs.ar[n] ≠ ⊥ |
Used terms: n1
| alsf(tid).tid = tid, gs.ar[n1] = ⊥, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ |
alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, gs.ar[n1] = ⊥, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, ⊥), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n], false), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ m. m < # gs.ar → gs.ar[m] ≠ gs.ar[n], ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic htok-returnfalse-f: n < # ar ⊦ htok(ar) ∧ ar[n] = ⊥ ∧ e ≠ ⊥ ∧ allslotsfull(ar, get_hash(e, # ar), n, e, false) → (∀ m. m < # ar → ar[m] ≠ e); (forward) from specification hashset-preds ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, gs.ar[n1] = ⊥, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, ⊥), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n], false), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ m. m < # gs.ar → gs.ar[m] ≠ gs.ar[n], ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ |
Used terms: n
| (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ |
(n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦
Used simplifier rules: n ≠ 0 ⊦ m % n < n; (s) ⊦ m < n → n ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic
| (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, ¬(alsf(tid).le = gs.ar[n1] ↔ alsf(tid).le ∈ ags.set), n1 < # gs.ar, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ |
(n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).le = gs.ar[n1], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ¬ alsf(tid).le ∈ ags.set, alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦
(n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ gs.ar[n1], alsf(tid).le ≠ ⊥, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set, alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦
| (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).le = gs.ar[n1], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ ⊥, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), ¬ alsf(tid).le ∈ ags.set, alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n1], # gs.ar), alsf(tid).le = gs.ar[n1], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, gs.ar[n1] ≠ ⊥, n1 < # gs.ar, get_hash(gs.ar[n1], # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1], false), htok(gs.ar), ¬ gs.ar[n1] ∈ ags.set, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ ∃ n. n < # gs.ar ∧ gs.ar[n1] = gs.ar[n] ∧ gs.ar[n] ≠ ⊥
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n1], # gs.ar), alsf(tid).le = gs.ar[n1], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n1], false, # gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, gs.ar[n1] ≠ ⊥, n1 < # gs.ar, get_hash(gs.ar[n1], # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n1], # gs.ar), n1, gs.ar[n1], false), htok(gs.ar), ¬ gs.ar[n1] ∈ ags.set, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0 ⊦ ∃ n. n < # gs.ar ∧ gs.ar[n1] = gs.ar[n] ∧ gs.ar[n] ≠ ⊥ |
Used terms: n1
| (n1 + 1) % # gs.ar = get_hash(alsf(tid).le, # gs.ar), alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, e0), lsf0(tid) = mkls(tid, alsf(tid).le, false, # gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, alsf(tid).le ≠ gs.ar[n1], alsf(tid).le ≠ ⊥, get_hash(alsf(tid).le, # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(alsf(tid).le, # gs.ar), n1, alsf(tid).le, false), htok(gs.ar), alsf(tid).le ∈ ags.set, alsf(tid).le ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ alsf(tid).le = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n], false), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), allslotsfull(gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n], false), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ |
⊦ allslotsfull(ar, n0, n, e, b) ↔ (∀ m. between(n0, m, n, b) ∧ m < # ar → ar[m] ≠ e ∧ ar[m] ≠ ⊥)
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦
Used terms: get_hash(gs.ar[n], # gs.ar), false, gs.ar, gs.ar[n], n1
| ⊦ allslotsfull(ar, n0, n, e, b) ↔ (∀ m. between(n0, m, n, b) ∧ m < # ar → ar[m] ≠ e ∧ ar[m] ≠ ⊥) |
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, between(get_hash(gs.ar[n], # gs.ar), n, n1, false) ∧ n < # gs.ar → gs.ar[n] ≠ gs.ar[n] ∧ gs.ar[n] ≠ ⊥, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦
Used terms: n
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, between(get_hash(gs.ar[n], # gs.ar), n, n1, false) ∧ n < # gs.ar → gs.ar[n] ≠ gs.ar[n] ∧ gs.ar[n] ≠ ⊥, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥) ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ¬ between(get_hash(gs.ar[n], # gs.ar), n, n1, false), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ¬ between(get_hash(gs.ar[n], # gs.ar), n, n1, false), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦ |
⊦ between(n0, m, n, b) ↔ n0 = n ∧ b ∨ (n < n0 ⊃ m < n ∨ n0 ≤ m;n0 ≤ m ∧ m < n)
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, (n1 < get_hash(gs.ar[n], # gs.ar) ⊃ ¬ n < n1 ∧ ¬ get_hash(gs.ar[n], # gs.ar) ≤ n;¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1), ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), get_hash(gs.ar[n], # gs.ar) ≠ n1 ∨ true ⊦
Used terms: get_hash(gs.ar[n], # gs.ar), n, n1, false
| ⊦ between(n0, m, n, b) ↔ n0 = n ∧ b ∨ (n < n0 ⊃ m < n ∨ n0 ≤ m;n0 ≤ m ∧ m < n) |
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, (n1 < get_hash(gs.ar[n], # gs.ar) ⊃ ¬ n < n1 ∧ ¬ get_hash(gs.ar[n], # gs.ar) ≤ n;¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1), ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), get_hash(gs.ar[n], # gs.ar) ≠ n1 ∨ true ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, (n1 < get_hash(gs.ar[n], # gs.ar) ⊃ ¬ n < n1 ∧ ¬ get_hash(gs.ar[n], # gs.ar) ≤ n;¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, (n1 < get_hash(gs.ar[n], # gs.ar) ⊃ ¬ n < n1 ∧ ¬ get_hash(gs.ar[n], # gs.ar) ≤ n;¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥ ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ¬ n1 < get_hash(gs.ar[n], # gs.ar), ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ m +1 = m + 1; (s) ⊦ ¬ n < n; (s) ⊦ m < n → m % n = m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, ¬ n1 < get_hash(gs.ar[n], # gs.ar), ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦ |
(n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (n1 + 1) % # gs.ar = get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n1 < # gs.ar, n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦ |
n1 + 1 = m0 * # gs.ar + n0, alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), n0 = get_hash(gs.ar[n], # gs.ar), pcf(tid) = M6, pcf0(tid) = M7, # gs.ar ≠ 0, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, n1 < # gs.ar, n0 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: n1 + 1, # gs.ar, m0, n0
| n1 + 1 = m0 * # gs.ar + n0, alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), n0 = get_hash(gs.ar[n], # gs.ar), pcf(tid) = M6, pcf0(tid) = M7, # gs.ar ≠ 0, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], get_hash(gs.ar[n], # gs.ar) < # gs.ar, n < # gs.ar, n1 < # gs.ar, n0 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ∀ tid0. lsf(tid0).tid = tid0, ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦ |
n1 + 1 = m0 * # gs.ar + get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s)
| n1 + 1 = m0 * # gs.ar + get_hash(gs.ar[n], # gs.ar), alsf(tid).le = gs.ar[n], alsf(tid).tid = tid, apcf(tid) = invMember, lsf(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, e0), lsf0(tid) = mkls(tid, gs.ar[n], false, # gs.ar, get_hash(gs.ar[n], # gs.ar), n1, gs.ar[n1]), pcf(tid) = M6, pcf0(tid) = M7, # ags.set ≠ 0, ags.set ≠ ∅, gs.ar[n] ≠ ⊥, gs.ar[n] ≠ gs.ar[n1], n < # gs.ar, get_hash(gs.ar[n], # gs.ar) < # gs.ar, n1 < # gs.ar, SetLInv(ags, alsf(tid), invMember), htok(gs.ar), gs.ar[n] ∈ ags.set, get_hash(gs.ar[n], # gs.ar) ≤ n1, ∀ e. e ∈ ags.set ↔ (∃ n. n < # gs.ar ∧ e = gs.ar[n] ∧ gs.ar[n] ≠ ⊥), ∀ tid0. tid0 ≠ tid → HashsetLInv(gs, lsf(tid0), pcf(tid0)) ∧ SetLInv(ags, alsf(tid0), apcf(tid0)) ∧ labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), ∀ tid0. alsf(tid0).tid = tid0, ∀ tid0. lsf(tid0).tid = tid0, ∀ m. between(get_hash(gs.ar[n], # gs.ar), m, n1, false) ∧ m < # gs.ar → gs.ar[m] ≠ gs.ar[n] ∧ gs.ar[m] ≠ ⊥, ¬ get_hash(gs.ar[n], # gs.ar) ≤ n ∨ ¬ n < n1 ⊦ |
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ m +1 = m + 1; (s) ⊦ m * (n + 1) = m * n + m; (s) ⊦ m + m0 ≤ m ↔ m0 = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ m ≤ n ↔ ¬ n < m; (ss) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ n + 0 = n; (s) ⊦ m ≤ m; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m0 * m < m ↔ m0 = 0 ∧ m ≠ 0; (ws) ⊦ m < n → n ≠ 0; (s) ⊦ 0 ≤ m; (s) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ 0 * n = 0; (s) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult ⊦ m + 1 ≠ 0; (s) ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m = n + 1 → ¬ m ≤ n; (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.