| ⊦ fwsim(HashsetIOA, SetIOA, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) |
¬ fwsim(HashsetIOA, SetIOA, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦
| ¬ fwsim(HashsetIOA, SetIOA, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦ |
¬ fwsim (IOAut(hashsetInit, hashsetStep, hashsetExt), SetIOA, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦
Used simplifier rules: HashsetIOA-def: ⊦ HashsetIOA = IOAut(hashsetInit, hashsetStep, hashsetExt);
| ¬ fwsim (IOAut(hashsetInit, hashsetStep, hashsetExt), SetIOA, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦ |
⊦ SetIOA = IOAut(setInit, setStep, setExt)
¬ fwsim (IOAut(hashsetInit, hashsetStep, hashsetExt), IOAut(setInit, setStep, setExt), λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦
Used terms:
| ⊦ SetIOA = IOAut(setInit, setStep, setExt) |
| ¬ fwsim (IOAut(hashsetInit, hashsetStep, hashsetExt), IOAut(setInit, setStep, setExt), λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ⊦ |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
(∃ cs. ¬(hashsetInit(cs) → (∃ as. (abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ∧ setInit(as)))) ∨ (∃ cs, ca, cs0, as. ¬ ( (abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ∧ hashsetStep(cs, ca, cs0) → (∃ as0. move(IOAut(setInit, setStep, setExt))(as, hashsetExt !(ca '), as0) ∧ abs(cs0, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf)))) ⊦
Used terms: hashsetStep, λ as, cs. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf), setInit, hashsetExt, hashsetInit, setStep, setExt
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| (∃ cs. ¬(hashsetInit(cs) → (∃ as. (abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ∧ setInit(as)))) ∨ (∃ cs, ca, cs0, as. ¬ ( (abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf)) ∧ hashsetStep(cs, ca, cs0) → (∃ as0. move(IOAut(setInit, setStep, setExt))(as, hashsetExt !(ca '), as0) ∧ abs(cs0, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf)))) ⊦ |
¬(hashsetInit(cs) → (∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as))) ∨ ¬ ( abs(cs0, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf) ∧ hashsetStep(cs0, ca, cs1) → (∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf))) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = τ ⊃ [];ext(a).e '); (s)
| ¬(hashsetInit(cs) → (∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as))) ∨ ¬ ( abs(cs0, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf) ∧ hashsetStep(cs0, ca, cs1) → (∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf))) ⊦ |
hashsetInit(cs) ⊦ ∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as)
HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(cs0, as), hashsetStep(cs0, ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
| hashsetInit(cs) ⊦ ∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as) |
cs = mkstate(gs, lsf, pcf), hashsetInit(cs) ⊦ ∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as)
Used simplifier rules: HashsetState freely generated by mkstate;;
| cs = mkstate(gs, lsf, pcf), hashsetInit(cs) ⊦ ∃ as. abs(cs, as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(cs.gstate, cs.lsf, cs.pcf) ∧ setInit(as) |
gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as)
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m > n ↔ n < m; (s) ⊦ hashsetInit(mkstate(gs, lsf, pcf)) ↔ (∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ pcf = (λ tid. idle)) ∧ (∀ tid. lsf(tid).tid = tid); (s)
| gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as) |
(∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ pcf = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) ⊦ HashsetInv(gs, lsf, pcf)
gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), (∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ (λ tid. idle) = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid)
gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as)
Used terms: gs, λ tid. idle, lsf
| (∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ pcf = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) ⊦ HashsetInv(gs, lsf, pcf) |
| gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), (∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ (λ tid. idle) = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) |
gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), (∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥)) ∧ tid = lsf(tid).tid
Used simplifier rules: ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m > n ↔ n < m; (s)
| gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), (∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥)) ∧ tid = lsf(tid).tid |
gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), ∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥)
gs.ar = mkar(n, ⊥), n ≠ 0, tid ≠ lsf(tid).tid, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as)
| gs.ar = mkar(n, ⊥), n ≠ 0, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as), ∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥) |
Used terms: n
| gs.ar = mkar(n, ⊥), n ≠ 0, tid ≠ lsf(tid).tid, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as) |
Used terms: tid
| gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ HashsetInv(gs, lsf, λ tid. idle) ∧ setInit(as) |
gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as)
| gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as) |
hashsetInit(mkstate(gs, lsf, pcf)), HashsetInv(gs, lsf, pcf) ⊦ ∃ ags, alsf, apcf. setInit(mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf))
gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ¬ hashsetInit(mkstate(gs, lsf, λ tid. idle)), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as)
gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∃ ags, alsf, apcf. setInit(mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs, lsf, λ tid. idle), mkstate(ags, alsf, apcf)) ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as)
Used terms: gs, lsf, λ tid. idle
| hashsetInit(mkstate(gs, lsf, pcf)), HashsetInv(gs, lsf, pcf) ⊦ ∃ ags, alsf, apcf. setInit(mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) |
| gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ¬ hashsetInit(mkstate(gs, lsf, λ tid. idle)), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as) |
gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as), ∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥)
Used simplifier rules: ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m > n ↔ n < m; (s) ⊦ hashsetInit(mkstate(gs, lsf, pcf)) ↔ (∃ n. n > 0 ∧ gs.ar = mkar(n, ⊥) ∧ pcf = (λ tid. idle)) ∧ (∀ tid. lsf(tid).tid = tid); (s)
| gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as), ∃ n0. n0 ≠ 0 ∧ mkar(n, ⊥) = mkar(n0, ⊥) |
Used terms: n
| gs.ar = mkar(n, ⊥), n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∃ ags, alsf, apcf. setInit(mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs, lsf, λ tid. idle), mkstate(ags, alsf, apcf)) ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as) |
gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle), ∀ tid. alsf(tid).tid = tid, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as)
Used simplifier rules: ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s) ⊦ setInit(mkstate(gs, lsf, pcf)) ↔ (gs.set = ∅ ∧ pcf = (λ tid. idle)) ∧ (∀ tid. lsf(tid).tid = tid); (s)
| gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle), ∀ tid. alsf(tid).tid = tid, ∀ tid. lsf(tid).tid = tid ⊦ ∃ as. abs(mkstate(gs, lsf, λ tid. idle), as) ∧ SetInv(as.gstate, as.lsf, as.pcf) ∧ setInit(as) |
gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦ abs(mkstate(gs, lsf, λ tid. idle), mkstate(ags, alsf, λ tid. idle)) ∧ SetInv(mkstate(ags, alsf, λ tid. idle).gstate, mkstate(ags, alsf, λ tid. idle).lsf, mkstate(ags, alsf, λ tid. idle).pcf) ∧ setInit(mkstate(ags, alsf, λ tid. idle))
Used terms: mkstate(ags, alsf, λ tid. idle)
| gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦ abs(mkstate(gs, lsf, λ tid. idle), mkstate(ags, alsf, λ tid. idle)) ∧ SetInv(mkstate(ags, alsf, λ tid. idle).gstate, mkstate(ags, alsf, λ tid. idle).lsf, mkstate(ags, alsf, λ tid. idle).pcf) ∧ setInit(mkstate(ags, alsf, λ tid. idle)) |
gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦
Used simplifier rules: ⊦ setInit(mkstate(gs, lsf, pcf)) ↔ (gs.set = ∅ ∧ pcf = (λ tid. idle)) ∧ (∀ tid. lsf(tid).tid = tid); (s) ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s) ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s)
| gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦ |
(gs.set = ∅ ∧ pcf = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) ⊦ SetInv(gs, lsf, pcf)
gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle), ∀ tid. alsf(tid).tid = tid, ∀ tid. lsf(tid).tid = tid ⊦ (λ tid. idle) = (λ tid. idle) ∧ (∀ tid. tid = alsf(tid).tid)
Used terms: ags, λ tid. idle, alsf
| (gs.set = ∅ ∧ pcf = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) ⊦ SetInv(gs, lsf, pcf) |
| gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle), ∀ tid. alsf(tid).tid = tid, ∀ tid. lsf(tid).tid = tid ⊦ (λ tid. idle) = (λ tid. idle) ∧ (∀ tid. tid = alsf(tid).tid) |
gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, tid ≠ alsf(tid).tid, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦
| gs.ar = mkar(n, ⊥), ags.set = ∅, n ≠ 0, tid ≠ alsf(tid).tid, HashsetInv(gs, lsf, λ tid. idle), absset(mkar(n, ⊥), ∅), ¬ SetInv(ags, alsf, λ tid. idle), ∀ tid. lsf(tid).tid = tid, ∀ tid. alsf(tid).tid = tid, ∀ tid. labs(gs, lsf(tid), idle, ags, alsf(tid), idle) ⊦ |
Used terms: tid
| HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(cs0, as), hashsetStep(cs0, ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
cs0 = mkstate(gs, lsf, pcf), HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(cs0, as), hashsetStep(cs0, ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
Used simplifier rules: HashsetState freely generated by mkstate;;
| cs0 = mkstate(gs, lsf, pcf), HashsetInv(cs0.gstate, cs0.lsf, cs0.pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(cs0, as), hashsetStep(cs0, ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
HashsetInv(gs, lsf, pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(mkstate(gs, lsf, pcf), as), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s)
| HashsetInv(gs, lsf, pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(mkstate(gs, lsf, pcf), as), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
as = mkstate(ags, alsf, apcf), HashsetInv(gs, lsf, pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(mkstate(gs, lsf, pcf), as), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
Used simplifier rules: SetState freely generated by mkstate;;
| as = mkstate(ags, alsf, apcf), HashsetInv(gs, lsf, pcf), SetInv(as.gstate, as.lsf, as.pcf), abs(mkstate(gs, lsf, pcf), as), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(as, (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s) ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s)
| HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
cs1 = mkstate(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf)
Used simplifier rules: HashsetState freely generated by mkstate;;
| cs1 = mkstate(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, cs1), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(cs1, as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(cs1.gstate, cs1.lsf, cs1.pcf) |
HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(gs0, lsf0, pcf0)
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s)
| HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(gs0, lsf0, pcf0) |
⊦ HashsetInv(gs, lsf, pcf) ∧ hashsetStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) → HashsetInv(gs0, lsf0, pcf0)
HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), HashsetInv(gs, lsf, pcf) ∧ hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)) → HashsetInv(gs0, lsf0, pcf0), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(gs0, lsf0, pcf0)
Used terms: lsf, gs, gs0, lsf0, pcf0, ca, pcf
| ⊦ HashsetInv(gs, lsf, pcf) ∧ hashsetStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) → HashsetInv(gs0, lsf0, pcf0) |
| HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), HashsetInv(gs, lsf, pcf) ∧ hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)) → HashsetInv(gs0, lsf0, pcf0), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) ∧ HashsetInv(gs0, lsf0, pcf0) |
HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
| HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), hashsetStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), ren(a, ags, alsf) = aa ⊦ (aa = τ ⊃ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ;∃ ags0, alsf0, apcf0. setStep(mkstate(ags, alsf, apcf), aa, mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) )
HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), (ren(ca, ags, alsf) = τ ⊃ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ;∃ ags0, alsf0, apcf0. setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) ), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
Used simplifier rules: ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s) ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) Used terms: lsf, gs, alsf, ren(ca, ags, alsf), gs0, lsf0, apcf, pcf0, ca, pcf, ags
| HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), hashsetStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), ren(a, ags, alsf) = aa ⊦ (aa = τ ⊃ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ;∃ ags0, alsf0, apcf0. setStep(mkstate(ags, alsf, apcf), aa, mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) ) |
| HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), (ren(ca, ags, alsf) = τ ⊃ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ;∃ ags0, alsf0, apcf0. setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) ), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), (ren(ca, ags, alsf) = τ ⊃ absset(gs0.ar, ags.set) ∧ (∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid))) ; setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)) ∧ absset(gs0.ar, ags0.set) ∧ (∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid))) ), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
Used simplifier rules: ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s)
| HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), (ren(ca, ags, alsf) = τ ⊃ absset(gs0.ar, ags.set) ∧ (∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid))) ; setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)) ∧ absset(gs0.ar, ags0.set) ∧ (∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid))) ), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
| ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
ren(ca, ags, alsf) = τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs0.ar, ags.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ∧ SetInv(mkstate(ags, alsf, apcf).gstate, mkstate(ags, alsf, apcf).lsf, mkstate(ags, alsf, apcf).pcf)
Used terms: mkstate(ags, alsf, apcf)
| ren(ca, ags, alsf) = τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs0.ar, ags.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags, alsf, apcf)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) ∧ SetInv(mkstate(ags, alsf, apcf).gstate, mkstate(ags, alsf, apcf).lsf, mkstate(ags, alsf, apcf).pcf) |
ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s) ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s)
| ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦ |
ren(ca, ags, alsf) = τ, hashsetExt(ca) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs0.ar, ags.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), hashsetExt(ca).e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ move(IOAut(start, step, ext))(s, [], s); (s)
| ren(ca, ags, alsf) = τ, hashsetExt(ca) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), absset(gs0.ar, ags.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), hashsetExt(ca).e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ |
hashsetExt(ca) = ⌜_e⌝ , ren(ca, ags, alsf) = τ, hashsetExt(ca) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), _e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ oe ≠ τ → (e = oe.e ↔ oe = ⌜e⌝ ); (elim) Used terms: hashsetExt(ca), _e
| hashsetExt(ca) = ⌜_e⌝ , ren(ca, ags, alsf) = τ, hashsetExt(ca) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), _e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦ |
hashsetExt(ca) = ⌜_e⌝ , ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), _e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ ⌜e⌝ ≠ τ; (s)
| hashsetExt(ca) = ⌜_e⌝ , ren(ca, ags, alsf) = τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), _e ', mkstate(ags, alsf, apcf)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags, alsf(tid), apcf(tid)) ⊦ |
Used simplifier rules: ext-tau: ⊦ hashsetExt(τ) = τ; HashsetAction freely generated by τ, doINSERT, doMEMBER, invINSERT, invMEMBER, retINSERT, retMEMBER ;; ⊦ ren(retMEMBER(tid, b), ags, alsf) = ARetMember(tid, b); (s) ⊦ ARetMember(tid, b) ≠ τ; (s) ⊦ ren(retINSERT(tid, b), ags, alsf) = ARetInsert(tid, b); (s) ⊦ ARetInsert(tid, b) ≠ τ; (s) ⊦ ren(invMEMBER(tid, e), ags, alsf) = AInvMember(tid, e); (s) ⊦ AInvMember(tid, e) ≠ τ; (s) ⊦ ren(invINSERT(tid, e), ags, alsf) = AInvInsert(tid, e); (s) ⊦ AInvInsert(tid, e) ≠ τ; (s) ⊦ ren(doMEMBER(tid), ags, alsf) = ADoMember(tid); (s) ⊦ ADoMember(tid) ≠ τ; (s) ⊦ ren(doINSERT(tid, b), ags, alsf) = ADoInsert(tid, b); (s) ⊦ ADoInsert(tid, b) ≠ τ; (s) ⊦ ren(τ, ags, alsf) = τ; (s) ⊦ ⌜e⌝ ≠ τ; (s)
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf)
Used simplifier rules: SetInv-thm: ⊦ SetInv(gs, lsf, pcf) ∧ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) → SetInv(gs0, lsf0, pcf0); (forward) from specification Set-proofs
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ ∃ as0. move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), as0) ∧ abs(mkstate(gs0, lsf0, pcf0), as0) ∧ SetInv(as0.gstate, as0.lsf, as0.pcf) |
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)) ⊦ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) ∧ SetInv(mkstate(ags0, alsf0, apcf0).gstate, mkstate(ags0, alsf0, apcf0).lsf, mkstate(ags0, alsf0, apcf0).pcf)
Used terms: mkstate(ags0, alsf0, apcf0)
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)) ⊦ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) ∧ SetInv(mkstate(ags0, alsf0, apcf0).gstate, mkstate(ags0, alsf0, apcf0).lsf, mkstate(ags0, alsf0, apcf0).pcf) |
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s) ⊦ mkstate(gstate, lsf, pcf).gstate = gstate; (s) ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ absset(gs.ar, ags.set); (s) ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid))); (s)
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ¬ move(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ al, sl. ¬ ( frag*(IOAut(setInit, setStep, setExt))(sl, al) ∧ mkstate(ags, alsf, apcf) = sl[0] ∧ mkstate(ags0, alsf0, apcf0) = sl.last ∧ IOAut(setInit, setStep, setExt).ext !(al) = (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ')) ⊦
Used terms: IOAut(setInit, setStep, setExt), mkstate(ags, alsf, apcf), (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), mkstate(ags0, alsf0, apcf0)
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ al, sl. ¬ ( frag*(IOAut(setInit, setStep, setExt))(sl, al) ∧ mkstate(ags, alsf, apcf) = sl[0] ∧ mkstate(ags0, alsf0, apcf0) = sl.last ∧ IOAut(setInit, setStep, setExt).ext !(al) = (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ')) ⊦ |
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ al, sl. ¬ frag*(IOAut(setInit, setStep, setExt))(sl, al) ∨ mkstate(ags, alsf, apcf) ≠ sl[0] ∨ mkstate(ags0, alsf0, apcf0) ≠ sl.last ∨ setExt !(al) ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ') ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ al, sl. ¬ frag*(IOAut(setInit, setStep, setExt))(sl, al) ∨ mkstate(ags, alsf, apcf) ≠ sl[0] ∨ mkstate(ags0, alsf0, apcf0) ≠ sl.last ∨ setExt !(al) ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ') ⊦ |
ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ¬ frag*(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ', ren(ca, ags, alsf) ') ∨ mkstate(ags, alsf, apcf) ≠ (mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ')[0] ∨ mkstate(ags0, alsf0, apcf0) ≠ (mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ').last ∨ setExt !(ren(ca, ags, alsf) ') ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ') ⊦
Used terms: ren(ca, ags, alsf) ', mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) '
| ren(ca, ags, alsf) ≠ τ, HashsetInv(gs0, lsf0, pcf0), HashsetInv(gs, lsf, pcf), SetInv(ags0, alsf0, apcf0), SetInv(ags, alsf, apcf), absset(gs.ar, ags.set), absset(gs0.ar, ags0.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ¬ frag*(IOAut(setInit, setStep, setExt))(mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ', ren(ca, ags, alsf) ') ∨ mkstate(ags, alsf, apcf) ≠ (mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ')[0] ∨ mkstate(ags0, alsf0, apcf0) ≠ (mkstate(ags, alsf, apcf) ' + mkstate(ags0, alsf0, apcf0) ').last ∨ setExt !(ren(ca, ags, alsf) ') ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e ') ⊦ |
(setExt(ren(ca, ags, alsf)) = τ ⊃ [];setExt(ren(ca, ags, alsf)).e ') ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = τ ⊃ [];ext(a).e '); (s) ⊦ mkstate(gstate, lsf, pcf) = mkstate(gstate0, lsf0, pcf0) ↔ gstate = gstate0 ∧ lsf = lsf0 ∧ pcf = pcf0; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + a ').last = a; (s) ⊦ (a ' + x)[0] = a; (s) ⊦ frag*(IOAut(start, step, ext))(s ' + s0 ', a ') ↔ step(s, a, s0); (s)
| (setExt(ren(ca, ags, alsf)) = τ ⊃ [];setExt(ren(ca, ags, alsf)).e ') ≠ (hashsetExt(ca) = τ ⊃ [];hashsetExt(ca).e '), ren(ca, ags, alsf) ≠ τ, HashsetInv(gs, lsf, pcf), HashsetInv(gs0, lsf0, pcf0), SetInv(ags, alsf, apcf), SetInv(ags0, alsf0, apcf0), absset(gs0.ar, ags0.set), absset(gs.ar, ags.set), hashsetStep(mkstate(gs, lsf, pcf), ca, mkstate(gs0, lsf0, pcf0)), setStep(mkstate(ags, alsf, apcf), ren(ca, ags, alsf), mkstate(ags0, alsf0, apcf0)), ∀ tid. labs(gs0, lsf0(tid), pcf0(tid), ags0, alsf0(tid), apcf0(tid)), ∀ tid. labs(gs, lsf(tid), pcf(tid), ags, alsf(tid), apcf(tid)) ⊦ |
Used simplifier rules: ext-tau: ⊦ hashsetExt(τ) = τ; ext-DoInsert: ⊦ hashsetExt(doINSERT(tid, b)) = τ; ext-DoMember: ⊦ hashsetExt(doMEMBER(tid)) = τ; ext-InvInsert: ⊦ hashsetExt(invINSERT(tid, e)) = ⌜InvInsert(tid, e)⌝ ; ext-InvMember: ⊦ hashsetExt(invMEMBER(tid, e)) = ⌜InvMember(tid, e)⌝ ; ext-RetInsert: ⊦ hashsetExt(retINSERT(tid, b)) = ⌜RetInsert(tid, b)⌝ ; ext-RetMember: ⊦ hashsetExt(retMEMBER(tid, b)) = ⌜RetMember(tid, b)⌝ ; HashsetAction freely generated by τ, doINSERT, doMEMBER, invINSERT, invMEMBER, retINSERT, retMEMBER ;; ⊦ ren(retMEMBER(tid, b), ags, alsf) = ARetMember(tid, b); (s) ⊦ setExt(ARetMember(tid, b)) = ⌜RetMember(tid, b)⌝ ; (s) ⊦ ⌜e⌝ ≠ τ; (s) ⊦ ⌜e⌝ .e = e; (s) ⊦ a ' = a0 ' ↔ a = a0; (s) ⊦ ren(retINSERT(tid, b), ags, alsf) = ARetInsert(tid, b); (s) ⊦ setExt(ARetInsert(tid, b)) = ⌜RetInsert(tid, b)⌝ ; (s) ⊦ ren(invMEMBER(tid, e), ags, alsf) = AInvMember(tid, e); (s) ⊦ setExt(AInvMember(tid, e)) = ⌜InvMember(tid, e)⌝ ; (s) ⊦ ren(invINSERT(tid, e), ags, alsf) = AInvInsert(tid, e); (s) ⊦ setExt(AInvInsert(tid, e)) = ⌜InvInsert(tid, e)⌝ ; (s) ⊦ ren(doMEMBER(tid), ags, alsf) = ADoMember(tid); (s) ⊦ setExt(ADoMember(tid)) = τ; (s) ⊦ ren(doINSERT(tid, b), ags, alsf) = ADoInsert(tid, b); (s) ⊦ setExt(ADoInsert(tid, b)) = τ; (s) ⊦ a ' ≠ []; (s) ⊦ ren(τ, ags, alsf) = τ; (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.