| # sl = # al + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al + ARetInsert(tid, b) ') ⊦ (∃ n. n < # al ∧ al[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid)) ∨ (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid) |
# sl = # al + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al + ARetInsert(tid, b) ') ⊦ ∃ n. n < # al ∧ al[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid)
| # sl = # al + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al + ARetInsert(tid, b) ') ⊦ ∃ n. n < # al ∧ al[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # al → al[m] ≠ τ ∧ al[m].tid ≠ tid) |
# sl = # [] + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, [] + ARetInsert(tid, b) ') ⊦ ∃ n. n < # [] ∧ [][n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # [] → [][m] ≠ τ ∧ [][m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # [] → [][m] ≠ τ ∧ [][m].tid ≠ tid)
# sl = #(a + al0) + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a + al0) + ARetInsert(tid, b) '), ∀ sl, tid, b. # sl = # al0 + 2 ∧ SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl, al0 + ARetInsert(tid, b) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid)) ∨ (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. n < #(a + al0) ∧ (a + al0)[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < #(a + al0) → (a + al0)[m] ≠ τ ∧ (a + al0)[m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < #(a + al0) → (a + al0)[m] ≠ τ ∧ (a + al0)[m].tid ≠ tid)
Used simplifier rules: List('a) freely generated by [], +;;
| # sl = # [] + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, [] + ARetInsert(tid, b) ') ⊦ ∃ n. n < # [] ∧ [][n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # [] → [][m] ≠ τ ∧ [][m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # [] → [][m] ≠ τ ∧ [][m].tid ≠ tid) |
# sl = 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, ARetInsert(tid, b) ') ⊦ (sl.last.lsf(tid).lb ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert
Used simplifier rules: ⊦ ¬ n < 0; (s) ⊦ # [] = 0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # sl = 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, ARetInsert(tid, b) ') ⊦ (sl.last.lsf(tid).lb ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert |
# sl = 2, sl = s + sl0, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, ARetInsert(tid, b) ') ⊦ (sl.last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert
Used simplifier rules: ⊦ # [] = 0; (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: sl, s, sl0
| # sl = 2, sl = s + sl0, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, ARetInsert(tid, b) ') ⊦ (sl.last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert |
sl0.tail = [], sl0 = sl0.head ', sl0 ≠ [], SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), sl0.head) ⊦ (sl0.head.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl0.head.lsf(tid).lb) ∧ s.pcf(tid) = retInsert
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x = x.head ' → x.last = x.head; (s) ⊦ x ≠ [] → (a ' + x).last = x.last; (s) ⊦ a + x = a ' + x; (s) ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ') ↔ step(s, a, sl.head) ∧ sl ≠ [] ∧ sl.tail = []; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ x + [] = x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as) n0 < n ⊦ (* n) = m0 + (* n0) ↔ n - n0 = m0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| sl0.tail = [], sl0 = sl0.head ', sl0 ≠ [], SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), sl0.head) ⊦ (sl0.head.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl0.head.lsf(tid).lb) ∧ s.pcf(tid) = retInsert |
sl = [], sl0 = s0 ', sl0 = s0 + sl, sl0 ≠ [], SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ s.pcf(tid) = retInsert
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: sl0, s0, sl
| sl = [], sl0 = s0 ', sl0 = s0 + sl, sl0 ≠ [], SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ s.pcf(tid) = retInsert |
SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ s.pcf(tid) = retInsert
Used simplifier rules: ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' = a0 ' ↔ a = a0; (s)
| SetInv(s.gstate, s.lsf, s.pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ s.pcf(tid) = retInsert |
s = mkstate(gstate, lsf, pcf), SetInv(gstate, lsf, pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: s, gstate, lsf, pcf
| s = mkstate(gstate, lsf, pcf), SetInv(gstate, lsf, pcf), setStep(s, ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert |
SetInv(gstate, lsf, pcf), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert
| SetInv(gstate, lsf, pcf), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert |
s0 = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert
Used simplifier rules: SetState freely generated by mkstate;;
| s0 = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), s0) ⊦ (s0.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ s0.lsf(tid).lb) ∧ pcf(tid) = retInsert |
SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), mkstate(gstate0, lsf0, pcf0)) ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf0(tid).lb) ∧ pcf(tid) = retInsert
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 ⊦ mkstate(gstate, lsf, pcf).lsf = lsf; (s)
| SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), setStep(mkstate(gstate, lsf, pcf), ARetInsert(tid, b), mkstate(gstate0, lsf0, pcf0)) ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf0(tid).lb) ∧ pcf(tid) = retInsert |
⊦ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ tid, ls, pc. lstep(gs, lsf(tid), pcf(tid), a, gs0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc))
SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), ∃ tid0, ls, pc. lstep(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b), gstate0, ls, pc) ∧ lsf0 = lsf(tid0 := ls) ∧ pcf0 = pcf(tid0 := pc) ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf0(tid).lb) ∧ pcf(tid) = retInsert
Used terms: lsf, pcf, pcf0, lsf0, gstate0, gstate, ARetInsert(tid, b)
| ⊦ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ tid, ls, pc. lstep(gs, lsf(tid), pcf(tid), a, gs0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc)) |
| SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), ∃ tid0, ls, pc. lstep(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b), gstate0, ls, pc) ∧ lsf0 = lsf(tid0 := ls) ∧ pcf0 = pcf(tid0 := pc) ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf0(tid).lb) ∧ pcf(tid) = retInsert |
SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert
Used simplifier rules: ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s)
| SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert |
tid0 = tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert
tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert
Used formulas: tid0 = tid
| tid0 = tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert |
SetInv (gstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)) ⊦ (lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb ↔ lsf(tid).lb) ∧ (b ↔ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb) ∧ pcf(tid) = retInsert
| SetInv (gstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)) ⊦ (lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb ↔ lsf(tid).lb) ∧ (b ↔ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb) ∧ pcf(tid) = retInsert |
pcf(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)))), pre(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)) ⊦ (lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb ↔ lsf(tid).lb) ∧ (b ↔ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb) ∧ pcf(tid) = retInsert
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; SetPC freely generated by idle, invInsert, invMember, retInsert, retMember;; ⊦ pre(gs, ls, retMember, a) ↔ (∃ b0. a = ARetMember(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s) ⊦ ARetInsert(tid, b) ≠ ARetMember(tid0, b0); (s) ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s) ⊦ ADoMember(tid) ≠ ARetInsert(tid0, b); (s) ⊦ pre(gs, ls, invInsert, a) ↔ (∃ b. a = ADoInsert(ls.tid, b)); (s) ⊦ ADoInsert(tid, b) ≠ ARetInsert(tid0, b0); (s) ⊦ gstepf(gs, ls, idle, a) = gs; (s) ⊦ pre(gs, ls, idle, a) ↔ (∃ e. a = AInvInsert(ls.tid, e) ∧ e ≠ ⊥) ∨ (∃ e. a = AInvMember(ls.tid, e) ∧ e ≠ ⊥); (s) ⊦ AInvInsert(tid, e) ≠ ARetInsert(tid0, b); (s) ⊦ AInvMember(tid, e) ≠ ARetInsert(tid0, b); (s)
| pcf(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)))), pre(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)) ⊦ (lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb ↔ lsf(tid).lb) ∧ (b ↔ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b)).lb) ∧ pcf(tid) = retInsert |
pcf(tid) = retInsert, ¬(lsf(tid).lb ↔ lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).lb), SetInv (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))), SetInv(gstate, lsf, pcf) ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ARetInsert(tid, b) = ARetInsert(tid0, b0) ↔ tid = tid0 ∧ (b ↔ b0); (ws) ⊦ pre(gs, ls, retInsert, a) ↔ (∃ b0. a = ARetInsert(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s)
| pcf(tid) = retInsert, ¬(lsf(tid).lb ↔ lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).lb), SetInv (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))), SetInv(gstate, lsf, pcf) ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = ls
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; Used terms: gstate, lsf(tid), tid, lsf(tid).lb
| ⊦ ls.tid = tid → lstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = ls |
| tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ ((tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb ↔ lsf(tid).lb) ∧ (b ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), ARetInsert(tid, b));lsf(tid)).lb) ∧ pcf(tid) = retInsert |
tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ (b ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert
| tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b))), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)))), SetInv(gstate, lsf, pcf), pre(gstate, lsf(tid0), pcf(tid0), ARetInsert(tid, b)) ⊦ (b ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert |
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; SetPC freely generated by idle, invInsert, invMember, retInsert, retMember;; ⊦ pre(gs, ls, retMember, a) ↔ (∃ b0. a = ARetMember(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s) ⊦ ARetInsert(tid, b) ≠ ARetMember(tid0, b0); (s) ⊦ pre(gs, ls, retInsert, a) ↔ (∃ b0. a = ARetInsert(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s) ⊦ ARetInsert(tid, b) = ARetInsert(tid0, b0) ↔ tid = tid0 ∧ (b ↔ b0); (ws) ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s) ⊦ ADoMember(tid) ≠ ARetInsert(tid0, b); (s) ⊦ pre(gs, ls, invInsert, a) ↔ (∃ b. a = ADoInsert(ls.tid, b)); (s) ⊦ ADoInsert(tid, b) ≠ ARetInsert(tid0, b0); (s) ⊦ gstepf(gs, ls, idle, a) = gs; (s) ⊦ pre(gs, ls, idle, a) ↔ (∃ e. a = AInvInsert(ls.tid, e) ∧ e ≠ ⊥) ∨ (∃ e. a = AInvMember(ls.tid, e) ∧ e ≠ ⊥); (s) ⊦ AInvInsert(tid, e) ≠ ARetInsert(tid0, b); (s) ⊦ AInvMember(tid, e) ≠ ARetInsert(tid0, b); (s)
| # sl = #(a + al0) + 2, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a + al0) + ARetInsert(tid, b) '), ∀ sl, tid, b. # sl = # al0 + 2 ∧ SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl, al0 + ARetInsert(tid, b) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid)) ∨ (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. n < #(a + al0) ∧ (a + al0)[n] = ADoInsert(tid, b) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < #(a + al0) → (a + al0)[m] ≠ τ ∧ (a + al0)[m].tid ≠ tid), (b ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (∀ m. m < #(a + al0) → (a + al0)[m] ≠ τ ∧ (a + al0)[m].tid ≠ tid) |
# sl = 3 + # al0, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # al0 + 2 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, sl.last.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (sl.last.lsf(tid).lb ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ a + x = a ' + x; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # sl = 3 + # al0, SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # al0 + 2 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, sl.last.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (sl.last.lsf(tid).lb ↔ sl.head.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl.head.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = 3 + # al0, sl = s + sl1, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # al0 + 2 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, sl.last.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (sl.last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: sl, s, sl1
| # sl = 3 + # al0, sl = s + sl1, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # al0 + 2 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, sl.last.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ sl[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (sl.last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ sl.last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl1 = # al0 + 2, SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ (s ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl1).last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # sl1 = # al0 + 2, SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ (s ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl1).last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl1 = # al0 + 2, s = mkstate(gstate, lsf, pcf), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ (s ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: s, gstate, lsf, pcf
| # sl1 = # al0 + 2, s = mkstate(gstate, lsf, pcf), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ (s ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl1 = # al0 + 2, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
| # sl1 = # al0 + 2, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl1, (a ' + al0) + ARetInsert(tid, b) '), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
# sl1 = # al0 + 2, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl1, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, sl1.head), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: al0 + ARetInsert(tid, b) ', mkstate(gstate, lsf, pcf), setExt, sl1, a, setInit, setStep
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| # sl1 = # al0 + 2, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl1, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, sl1.head), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl1 = # al0 + 2, sl1 = s + sl, sl1 ≠ [], SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl1, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: sl1, s, sl
| # sl1 = # al0 + 2, sl1 = s + sl, sl1 ≠ [], SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl1, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ sl0, tid0, b0. # sl0 = # sl1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + sl1)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate, lsf, pcf) ' + sl1).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ sl0, tid0, b0. # sl0 = # sl + 1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s)
| # sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ sl0, tid0, b0. # sl0 = # sl + 1 ∧ SetInv(sl0.head.gstate, sl0.head.lsf, sl0.head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(sl0, al0 + ARetInsert(tid0, b0) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid0, sl0.last.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0[n].pcf(tid0) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0)) ∨ (sl0.last.lsf(tid0).lb ↔ sl0.head.lsf(tid0).lb) ∧ (b0 ↔ sl0.last.lsf(tid0).lb) ∧ sl0.head.pcf(tid0) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid0) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), #(s ' + sl) = # sl + 1 ∧ SetInv((s ' + sl).head.gstate, (s ' + sl).head.lsf, (s ' + sl).head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid)) ∨ ((s ' + sl).last.lsf(tid).lb ↔ (s ' + sl).head.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl).head.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used terms: s ' + sl, tid, b
| # sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), #(s ' + sl) = # sl + 1 ∧ SetInv((s ' + sl).head.gstate, (s ' + sl).head.lsf, (s ' + sl).head.pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) ') → (∃ n. n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid)) ∨ ((s ' + sl).last.lsf(tid).lb ↔ (s ' + sl).head.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl).head.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), SetInv(s.gstate, s.lsf, s.pcf) → n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((s ' + sl).last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # sl = # al0 + 1, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), SetInv(s.gstate, s.lsf, s.pcf) → n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((s ' + sl).last.lsf(tid).lb ↔ s.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ s.pcf(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, s = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), SetInv(gstate0, lsf0, pcf0) → n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((s ' + sl).last.lsf(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: s, gstate0, lsf0, pcf0
| # sl = # al0 + 1, s = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, s), SetInv(gstate0, lsf0, pcf0) → n < # al0 ∧ al0[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((s ' + sl).last.lsf(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (s ' + sl).last.lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + s ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((s ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (s ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
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
| # sl = # al0 + 1, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ ((mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), ((mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ (mkstate(gstate0, lsf0, pcf0) ' + sl).last.lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ (lsf1(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: (mkstate(gstate0, lsf0, pcf0) ' + sl).last, gstate1, lsf1, pcf1
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ (lsf1(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf2(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ (lsf1(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: (mkstate(gstate0, lsf0, pcf0) ' + sl)[n], gstate2, lsf2, pcf2
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), n < # al0 ∧ al0[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf2(tid) = invInsert ∧ (∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ∨ (lsf1(tid).lb ↔ lsf0(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf0(tid) = retInsert ∧ (∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid) ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), b ↔ lsf1(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, b ↔ lsf1(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), b ↔ lsf1(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), ¬ # al0 < n + 1 ∧ (a ' + al0)[n + 1] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n + 1].pcf(tid) = invInsert ∧ (∀ m0. n + 1 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid)
Used terms: n + 1
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), ¬ # al0 < n + 1 ∧ (a ' + al0)[n + 1] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n + 1].pcf(tid) = invInsert ∧ (∀ m0. n + 1 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n + 1 < # al0, n + 1 < m0, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n + 1 < # al0, n + 1 < m0, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, n + 1 < m0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ¬ m0 < # a ', ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), al0[m0 - # a '] ≠ τ ∧ al0[m0 - # a '].tid ≠ tid
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m < n → n ≠ 0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: m0, a ', al0
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < # al0, n + 1 < m0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ¬ m0 < # a ', ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), al0[m0 - # a '] ≠ τ ∧ al0[m0 - # a '].tid ≠ tid |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n + 1 < # al0, n + 1 < m0, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), al0[m0 - 1] ≠ τ ∧ al0[m0 - 1].tid ≠ tid
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < n → n ≠ 0; (s) ⊦ m < 1 ↔ m = 0; (s)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), al0[n] = ADoInsert(tid, lsf1(tid).lb), pcf2(tid) = invInsert, al0 ≠ [], n + 1 < # al0, n + 1 < m0, n < # al0, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), al0[m0 - 1] ≠ τ ∧ al0[m0 - 1].tid ≠ tid |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), m0 = m1 + 1, pcf2(tid) = invInsert, al0 ≠ [], m0 ≠ 0, n < # al0, n + 1 < m0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ 0 ≤ m; (s) n0 < n ⊦ ¬ m + (* n) < (* n0); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: m0, m1
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), m0 = m1 + 1, pcf2(tid) = invInsert, al0 ≠ [], m0 ≠ 0, n < # al0, n + 1 < m0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), m0 ≤ # al0, ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < m1, m1 < # al0, n < # al0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m + 1 ≠ 0; (s)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), al0[n] = ADoInsert(tid, lsf1(tid).lb), (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf2(tid) = invInsert, al0 ≠ [], n < m1, m1 < # al0, n < # al0, n + 1 < # al0, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. n < m ∧ m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid, (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
Used terms: m1
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, b ↔ lsf1(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, b) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n. ¬ # al0 < n ∧ (a ' + al0)[n] = ADoInsert(tid, lsf1(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n].pcf(tid) = invInsert ∧ (∀ m0. n < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (b ↔ lsf1(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf0(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ ∃ n0. ¬ # al0 < n0 ∧ (a ' + al0)[n0] = ADoInsert(tid, lsf0(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[n0].pcf(tid) = invInsert ∧ (∀ m0. n0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid), (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), ¬ # al0 < 0 ∧ (a ' + al0)[0] = ADoInsert(tid, lsf0(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[0].pcf(tid) = invInsert ∧ (∀ m0. 0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid)
Used terms: 0
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), ¬ # al0 < 0 ∧ (a ' + al0)[0] = ADoInsert(tid, lsf0(tid).lb) ∧ (mkstate(gstate, lsf, pcf) ' + mkstate(gstate0, lsf0, pcf0) ' + sl)[0].pcf(tid) = invInsert ∧ (∀ m0. 0 < m0 ∧ ¬ # al0 < m0 → (a ' + al0)[m0] ≠ τ ∧ (a ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf0(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0].tid ≠ tid)
Used simplifier rules: ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ mkstate(gstate, lsf, pcf).pcf = pcf; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ ¬ n < 0; (s)
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate0, lsf0, pcf0)), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf0(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0].tid ≠ tid) |
⊦ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ tid, ls, pc. lstep(gs, lsf(tid), pcf(tid), a, gs0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc))
# sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, ∃ tid, ls, pc. lstep(gstate, lsf(tid), pcf(tid), a, gstate0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc) ⊦ a = ADoInsert(tid, lsf0(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used terms: lsf, pcf, pcf0, lsf0, gstate0, gstate, a
| ⊦ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ tid, ls, pc. lstep(gs, lsf(tid), pcf(tid), a, gs0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc)) |
| # sl = # al0 + 1, (mkstate(gstate0, lsf0, pcf0) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf0(tid).lb, (mkstate(gstate0, lsf0, pcf0) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf0(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate0, lsf0, pcf0) ' + sl, al0 + ARetInsert(tid, lsf0(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, ∃ tid, ls, pc. lstep(gstate, lsf(tid), pcf(tid), a, gstate0, ls, pc) ∧ lsf0 = lsf(tid := ls) ∧ pcf0 = pcf(tid := pc) ⊦ a = ADoInsert(tid, lsf0(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf0(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf0(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
Used simplifier rules: ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), tid0 = tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
Used formulas: tid0 = tid
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), tid0 = tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid)
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid), (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invMember, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
# sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retMember, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
Used simplifier rules: SetPC freely generated by idle, invInsert, invMember, retInsert, retMember;;
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, a = AInvInsert(tid, e) ∧ e ≠ ⊥ ∨ a = AInvMember(tid, e0) ∧ e0 ≠ ⊥ ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ idle ≠ invInsert; (s) ⊦ idle ≠ retInsert; (s) ⊦ pre(gs, ls, idle, a) ↔ (∃ e. a = AInvInsert(ls.tid, e) ∧ e ≠ ⊥) ∨ (∃ e. a = AInvMember(ls.tid, e) ∧ e ≠ ⊥); (s) ⊦ gstepf(gs, ls, idle, a) = gs; (s)
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, a = AInvInsert(tid, e) ∧ e ≠ ⊥ ∨ a = AInvMember(tid, e0) ∧ e0 ≠ ⊥ ⊦ |
# sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), a = AInvInsert(tid, e), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, e ≠ ⊥, SetInv(gstate, lsf, pcf), SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
# sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), a = AInvMember(tid, e0), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, e0 ≠ ⊥, SetInv(gstate, lsf, pcf), SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), a = AInvInsert(tid, e), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, e ≠ ⊥, SetInv(gstate, lsf, pcf), SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
# sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e)).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, AInvInsert(tid, e)) = retInsert, e ≠ ⊥, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e)).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, AInvInsert(tid, e)) = retInsert, e ≠ ⊥, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvInsert(tid, e))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, idle, AInvInsert(tid, e)) = ls.le:= e
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → pcstepf(gs, ls, idle, AInvInsert(tid, e)) = invInsert; (s) ⊦ invInsert ≠ retInsert; (s) Used terms: gstate, lsf(tid), tid, e
| ⊦ ls.tid = tid → lstepf(gs, ls, idle, AInvInsert(tid, e)) = ls.le:= e |
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, a).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), a = AInvMember(tid, e0), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, a) = retInsert, e0 ≠ ⊥, SetInv(gstate, lsf, pcf), SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
# sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0)).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, AInvMember(tid, e0)) = retInsert, e0 ≠ ⊥, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0)).lb, (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = idle, pcstepf(gstate, lsf(tid), idle, AInvMember(tid, e0)) = retInsert, e0 ≠ ⊥, SetInv(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid := lstepf(gstate, lsf(tid), idle, AInvMember(tid, e0))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, idle, AInvMember(tid, e)) = ls.le:= e
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → pcstepf(gs, ls, idle, AInvMember(tid, e)) = invMember; (s) ⊦ invMember ≠ retInsert; (s) Used terms: gstate, lsf(tid), tid, e0
| ⊦ ls.tid = tid → lstepf(gs, ls, idle, AInvMember(tid, e)) = ls.le:= e |
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (b ↔ lsf1(tid).lb) ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid)
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ADoInsert(tid, b) = ADoInsert(tid0, b0) ↔ tid = tid0 ∧ (b ↔ b0); (ws) ⊦ invInsert ≠ retInsert; (s) ⊦ pre(gs, ls, invInsert, a) ↔ (∃ b. a = ADoInsert(ls.tid, b)); (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (b ↔ lsf1(tid).lb) ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, ¬(b ↔ lsf1(tid).lb), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ¬ # al0 < m0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, ¬(b ↔ lsf1(tid).lb), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, invInsert, ADoInsert(tid, b)) = (b ⊃ ls.lb:= true;ls.lb:= false)
# sl = # al0 + 1, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf(tid).tid = tid, lsf1(tid).lb ↔ (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false).lb, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, ¬(b ↔ lsf1(tid).lb), SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; Used terms: gstate, lsf(tid), tid, b
| ⊦ ls.tid = tid → lstepf(gs, ls, invInsert, ADoInsert(tid, b)) = (b ⊃ ls.lb:= true;ls.lb:= false) |
| # sl = # al0 + 1, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf(tid).tid = tid, lsf1(tid).lb ↔ (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false).lb, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, ¬(b ↔ lsf1(tid).lb), SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
# sl = # al0 + 1, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false).lb, ( mkstate((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, ¬(b ↔ lsf1(tid).lb), SetInv(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → gstepf(gs, ls, invInsert, ADoInsert(tid, b)) = (b ⊃ gs.set:= (gs.set ++ ls.le);gs); (s) ⊦ ls.tid = tid → pcstepf(gs, ls, invInsert, ADoInsert(tid, b)) = retInsert; (s)
| # sl = # al0 + 1, ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false).lb, ( mkstate((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, ¬(b ↔ lsf1(tid).lb), SetInv(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate(gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := (b ⊃ lsf(tid).lb:= true;lsf(tid).lb:= false)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
Used simplifier rules: ⊦ (ls.lb:= lb).lb ↔ lb; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ¬ # al0 < m0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ¬ m0 < # ADoInsert(tid, lsf1(tid).lb) ', ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0 - # ADoInsert(tid, lsf1(tid).lb) '] ≠ τ ∧ al0[m0 - # ADoInsert(tid, lsf1(tid).lb) '].tid ≠ tid
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) Used terms: m0, ADoInsert(tid, lsf1(tid).lb) ', al0
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ¬ m0 < # ADoInsert(tid, lsf1(tid).lb) ', ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0 - # ADoInsert(tid, lsf1(tid).lb) '] ≠ τ ∧ al0[m0 - # ADoInsert(tid, lsf1(tid).lb) '].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0 - 1] ≠ τ ∧ al0[m0 - 1].tid ≠ tid
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0 - 1] ≠ τ ∧ al0[m0 - 1].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), m0 = m1 + 1, pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: m0, m1
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), m0 = m1 + 1, pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, m0 ≠ 0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), m0 ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, al0 ≠ [], m1 < # al0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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) ⊦ m + 1 ≠ 0; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).lb, ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invInsert, pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)) = retInsert, al0 ≠ [], m1 < # al0, SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m1] ≠ τ ∧ al0[m1].tid ≠ tid |
Used terms: m1
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invMember, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invMember, ADoMember(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invMember, pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ invInsert ≠ invMember; (s) ⊦ invMember ≠ retInsert; (s) ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), invMember, ADoMember(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = invMember, pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, invMember, ADoMember(tid)) = ls.lb:= (ls.le ∈ gs.set)
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → pcstepf(gs, ls, invMember, ADoMember(tid)) = retMember; (s) ⊦ retInsert ≠ retMember; (s) Used terms: gstate, lsf(tid), tid
| ⊦ ls.tid = tid → lstepf(gs, ls, invMember, ADoMember(tid)) = ls.lb:= (ls.le ∈ gs.set) |
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).lb, ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (¬ # al0 < m → (ARetInsert(tid, lsf(tid).lb) ' + al0)[m] ≠ τ ∧ (ARetInsert(tid, lsf(tid).lb) ' + al0)[m].tid ≠ tid)
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ invInsert ≠ retInsert; (s) ⊦ pre(gs, ls, retInsert, a) ↔ (∃ b0. a = ARetInsert(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).lb, ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ (¬ # al0 < m → (ARetInsert(tid, lsf(tid).lb) ' + al0)[m] ≠ τ ∧ (ARetInsert(tid, lsf(tid).lb) ' + al0)[m].tid ≠ tid) |
⊦ ls.tid = tid → lstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = ls
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → pcstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = idle; (s) ⊦ idle ≠ retInsert; (s) Used terms: gstate, lsf(tid), tid, lsf(tid).lb
| ⊦ ls.tid = tid → lstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = ls |
| # sl = # al0 + 1, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), pcf(tid), a).lb, (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retMember, pcstepf(gstate, lsf(tid), pcf(tid), a) = retInsert, SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid), pcf(tid), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).lb, ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retMember, pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ invInsert ≠ retMember; (s) ⊦ retInsert ≠ retMember; (s) ⊦ pre(gs, ls, retMember, a) ↔ (∃ b0. a = ARetMember(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).lb, ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retMember, pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)) = retInsert, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)), lsf(tid := lstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb))), pcf(tid := retInsert)) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ |
⊦ ls.tid = tid → lstepf(gs, ls, retMember, ARetMember(tid, b0)) = ls
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ ls.tid = tid → pcstepf(gs, ls, retMember, ARetMember(tid, b0)) = idle; (s) ⊦ idle ≠ retInsert; (s) Used terms: gstate, lsf(tid), tid, lsf(tid).lb
| ⊦ ls.tid = tid → lstepf(gs, ls, retMember, ARetMember(tid, b0)) = ls |
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), (tid0 = tid ⊃ pcstepf(gstate, lsf(tid), pcf(tid), a);pcf(tid)) = retInsert, lsf1(tid).lb ↔ (tid0 = tid ⊃ lstepf(gstate, lsf(tid), pcf(tid), a);lsf(tid)).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf1(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (lsf1(tid).lb ↔ lsf(tid).lb) ∧ pcf(tid) = retInsert ∧ (¬ # al0 < m → (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid), a = ADoInsert(tid, lsf1(tid).lb) ∧ pcf(tid) = invInsert ∧ (m0 ≠ 0 ∧ ¬ # al0 < m0 → (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0] ≠ τ ∧ (ADoInsert(tid, lsf1(tid).lb) ' + al0)[m0].tid ≠ tid) |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid
Used simplifier rules: ⊦ invInsert ≠ retInsert; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, m < # a ', SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ¬ m < # a ', ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m - # a '] ≠ τ ∧ al0[m - # a '].tid ≠ tid
Used terms: m, a ', al0
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, m < # a ', SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ (a ' + al0)[m] ≠ τ ∧ (a ' + al0)[m].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a ≠ τ ∧ a.tid ≠ tid
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ 0 ≤ m; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a ≠ τ ∧ a.tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcf(tid0) = idle, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a ≠ τ ∧ a.tid ≠ tid
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; SetPC freely generated by idle, invInsert, invMember, retInsert, retMember;; ⊦ pre(gs, ls, retMember, a) ↔ (∃ b0. a = ARetMember(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s) ⊦ ARetMember(tid, b) ≠ τ; (s) ⊦ ARetMember(tid, b).tid = tid; (s) ⊦ pre(gs, ls, retInsert, a) ↔ (∃ b0. a = ARetInsert(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s) ⊦ ARetInsert(tid, b) ≠ τ; (s) ⊦ ARetInsert(tid, b).tid = tid; (s) ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s) ⊦ ADoMember(tid) ≠ τ; (s) ⊦ ADoMember(tid).tid = tid; (s) ⊦ pre(gs, ls, invInsert, a) ↔ (∃ b. a = ADoInsert(ls.tid, b)); (s) ⊦ ADoInsert(tid, b) ≠ τ; (s) ⊦ ADoInsert(tid, b).tid = tid; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcf(tid0) = idle, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ a ≠ τ ∧ a.tid ≠ tid |
# sl = # al0 + 1, (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcf(tid0) = idle, tid0 ≠ tid, SetInv(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, a = AInvInsert(tid0, e) ∧ e ≠ ⊥ ∨ a = AInvMember(tid0, e0) ∧ e0 ≠ ⊥ ⊦ a ≠ τ ∧ a.tid ≠ tid
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; ⊦ pre(gs, ls, idle, a) ↔ (∃ e. a = AInvInsert(ls.tid, e) ∧ e ≠ ⊥) ∨ (∃ e. a = AInvMember(ls.tid, e) ∧ e ≠ ⊥); (s) ⊦ gstepf(gs, ls, idle, a) = gs; (s)
| # sl = # al0 + 1, (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl)[n] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, pcf(tid0) = idle, tid0 ≠ tid, SetInv(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) (mkstate(gstate, lsf(tid0 := lstepf(gstate, lsf(tid0), idle, a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), idle, a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid, a = AInvInsert(tid0, e) ∧ e ≠ ⊥ ∨ a = AInvMember(tid0, e0) ∧ e0 ≠ ⊥ ⊦ a ≠ τ ∧ a.tid ≠ tid |
Used simplifier rules: ⊦ AInvMember(tid, e) ≠ τ; (s) ⊦ AInvMember(tid, e).tid = tid; (s) ⊦ AInvInsert(tid, e) ≠ τ; (s) ⊦ AInvInsert(tid, e).tid = tid; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ¬ m < # a ', ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m - # a '] ≠ τ ∧ al0[m - # a '].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, m ≠ 0, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m - 1] ≠ τ ∧ al0[m - 1].tid ≠ tid
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, m ≠ 0, tid0 ≠ tid, SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m - 1] ≠ τ ∧ al0[m - 1].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), m = m0 + 1, pcf(tid) = retInsert, m ≠ 0, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0] ≠ τ ∧ al0[m0].tid ≠ tid
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: m, m0
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), m = m0 + 1, pcf(tid) = retInsert, m ≠ 0, tid0 ≠ tid, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), m ≤ # al0, ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0] ≠ τ ∧ al0[m0].tid ≠ tid |
# sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, al0 ≠ [], tid0 ≠ tid, m0 < # al0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0] ≠ τ ∧ al0[m0].tid ≠ tid
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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) ⊦ m + 1 ≠ 0; (s)
| # sl = # al0 + 1, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl ).last = mkstate(gstate1, lsf1, pcf1), lsf1(tid).lb ↔ lsf(tid).lb, ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl )[n ] = mkstate(gstate2, lsf2, pcf2), pcf(tid) = retInsert, al0 ≠ [], tid0 ≠ tid, m0 < # al0, SetInv(gstate, lsf, pcf), SetInv (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid0), pcf(tid0), a), lsf(tid0 := lstepf(gstate, lsf(tid0), pcf(tid0), a)), pcf(tid0 := pcstepf(gstate, lsf(tid0), pcf(tid0), a))) ' + sl, al0 + ARetInsert(tid, lsf(tid).lb) '), pre(gstate, lsf(tid0), pcf(tid0), a), ∀ m. m < # al0 → al0[m] ≠ τ ∧ al0[m].tid ≠ tid ⊦ al0[m0] ≠ τ ∧ al0[m0].tid ≠ tid |
Used terms: m0
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.