| SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al) ⊦ sl.head.gstate.set ⊆ sl.last.gstate.set ∧ SetInv(sl.last.gstate, sl.last.lsf, sl.last.pcf) |
SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al) ⊦ sl.head.gstate.set ⊆ sl.last.gstate.set ∧ SetInv(sl.last.gstate, sl.last.lsf, sl.last.pcf)
| SetInv(sl.head.gstate, sl.head.lsf, sl.head.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al) ⊦ sl.head.gstate.set ⊆ sl.last.gstate.set ∧ SetInv(sl.last.gstate, sl.last.lsf, sl.last.pcf) |
sl = s + sl0, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al) ⊦ s.gstate.set ⊆ sl.last.gstate.set ∧ SetInv(sl.last.gstate, sl.last.lsf, sl.last.pcf)
Used simplifier rules: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: sl, s, sl0
| sl = s + sl0, sl ≠ [], SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(sl, al) ⊦ s.gstate.set ⊆ sl.last.gstate.set ∧ SetInv(sl.last.gstate, sl.last.lsf, sl.last.pcf) |
SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl0, al) ⊦ s.gstate.set ⊆ (s ' + sl0).last.gstate.set ∧ SetInv((s ' + sl0).last.gstate, (s ' + sl0).last.lsf, (s ' + sl0).last.pcf)
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)
| SetInv(s.gstate, s.lsf, s.pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl0, al) ⊦ s.gstate.set ⊆ (s ' + sl0).last.gstate.set ∧ SetInv((s ' + sl0).last.gstate, (s ' + sl0).last.lsf, (s ' + sl0).last.pcf) |
s = mkstate(gstate, lsf, pcf), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl0, al) ⊦ gstate.set ⊆ (s ' + sl0).last.gstate.set ∧ SetInv((s ' + sl0).last.gstate, (s ' + sl0).last.lsf, (s ' + sl0).last.pcf)
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), frag*(IOAut(setInit, setStep, setExt))(s ' + sl0, al) ⊦ gstate.set ⊆ (s ' + sl0).last.gstate.set ∧ SetInv((s ' + sl0).last.gstate, (s ' + sl0).last.lsf, (s ' + sl0).last.pcf) |
SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al) ⊦ gstate.set ⊆ (mkstate(gstate, lsf, pcf) ' + sl0).last.gstate.set ∧ SetInv ((mkstate(gstate, lsf, pcf) ' + sl0).last.gstate, (mkstate(gstate, lsf, pcf) ' + sl0).last.lsf, (mkstate(gstate, lsf, pcf) ' + sl0).last.pcf)
| SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al) ⊦ gstate.set ⊆ (mkstate(gstate, lsf, pcf) ' + sl0).last.gstate.set ∧ SetInv ((mkstate(gstate, lsf, pcf) ' + sl0).last.gstate, (mkstate(gstate, lsf, pcf) ' + sl0).last.lsf, (mkstate(gstate, lsf, pcf) ' + sl0).last.pcf) |
(mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: ⊦ (gstate = s.gstate ∧ lsf = s.lsf) ∧ pcf = s.pcf ↔ s = mkstate(gstate, lsf, pcf); (elim) Used terms: (mkstate(gstate, lsf, pcf) ' + sl0).last, gstate0, lsf0, pcf0
| (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, a + al0), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: List('a) freely generated by [], +;; ⊦ frag*(IOAut(start, step, ext))(sl, []) ↔ sl = sl.head '; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.last = a; (s) ⊦ mkstate(gstate, lsf, pcf) = mkstate(gstate0, lsf0, pcf0) ↔ gstate = gstate0 ∧ lsf = lsf0 ∧ pcf = pcf0; (ws) ⊦ # s = # s0 → (s ⊆ s0 ↔ s = s0); (s)
| (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, a + al0), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, a ' + al0), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, a ' + al0), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
(mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl0, al0), setStep(mkstate(gstate, lsf, pcf), a, sl0.head), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: al0, mkstate(gstate, lsf, pcf), setExt, sl0, a, setInit, setStep
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl0, al0), setStep(mkstate(gstate, lsf, pcf), a, sl0.head), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), sl0 = s + sl, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl0, al0), setStep(mkstate(gstate, lsf, pcf), a, sl0.head), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: List('a) freely generated by [], +;; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.last = a; (s) ⊦ mkstate(gstate, lsf, pcf) = mkstate(gstate0, lsf0, pcf0) ↔ gstate = gstate0 ∧ lsf = lsf0 ∧ pcf = pcf0; (ws) ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0), sl0 = s + sl, SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(sl0, al0), setStep(mkstate(gstate, lsf, pcf), a, sl0.head), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(s ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s)
| (s ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(s ' + sl).last = mkstate(gstate0, lsf0, pcf0), s = mkstate(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used simplifier rules: SetState freely generated by mkstate;;
| (s ' + sl).last = mkstate(gstate0, lsf0, pcf0), s = mkstate(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(s ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, s), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
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(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), ∀ gstate, lsf, pcf, sl0, gstate0, lsf0, pcf0. (mkstate(gstate, lsf, pcf) ' + sl0).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate, lsf, pcf) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate, lsf, pcf) ' + sl0, al0) → gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate1, lsf1, pcf1) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0) → gstate1.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0)
Used terms: gstate1, lsf1, pcf1, sl, gstate0, lsf0, pcf0
| (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0) ∧ SetInv(gstate1, lsf1, pcf1) ∧ frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0) → gstate1.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) ⊦ gstate.set ⊆ gstate0.set ∧ SetInv(gstate0, lsf0, pcf0) |
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set ⊦
Used simplifier rules: sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic
| (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set ⊦ |
⊦ SetInv(gs, lsf, pcf) ∧ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) → SetInv(gs0, lsf0, pcf0)
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set, SetInv(gstate, lsf, pcf) ∧ setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)) → SetInv(gstate1, lsf1, pcf1) ⊦
Used terms: lsf, pcf, pcf1, lsf1, gstate1, gstate, a
| ⊦ SetInv(gs, lsf, pcf) ∧ setStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) → SetInv(gs0, lsf0, pcf0) |
| (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set, SetInv(gstate, lsf, pcf) ∧ setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)) → SetInv(gstate1, lsf1, pcf1) ⊦ |
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set ⊦
| (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate, lsf, pcf), SetInv(gstate1, lsf1, pcf1), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), setStep(mkstate(gstate, lsf, pcf), a, mkstate(gstate1, lsf1, pcf1)), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set ⊦ |
⊦ 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))
(mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set, ∃ tid, ls, pc. lstep(gstate, lsf(tid), pcf(tid), a, gstate1, ls, pc) ∧ lsf1 = lsf(tid := ls) ∧ pcf1 = pcf(tid := pc) ⊦
Used terms: lsf, pcf, pcf1, lsf1, gstate1, 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)) |
| (mkstate(gstate1, lsf1, pcf1) ' + sl).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstate1, lsf1, pcf1), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt))(mkstate(gstate1, lsf1, pcf1) ' + sl, al0), gstate1.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate1.set, ∃ tid, ls, pc. lstep(gstate, lsf(tid), pcf(tid), a, gstate1, ls, pc) ∧ lsf1 = lsf(tid := ls) ∧ pcf1 = pcf(tid := pc) ⊦ |
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), 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 := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
Used simplifier rules: sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ 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)
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), 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 := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), lsf(tid).tid = tid, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; Used formulas: lsf(tid).tid = tid
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), lsf(tid).tid = tid, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), 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 := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid;
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), SetInv(gstate0, lsf0, pcf0), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), 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 := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invMember, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retMember, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; SetPC freely generated by idle, invInsert, invMember, retInsert, retMember;; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ 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)
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate0, lsf0, pcf0), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), 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 := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ pre(gs, ls, invInsert, a) ↔ (∃ b. a = ADoInsert(ls.tid, b)); (s)
| ( mkstate (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate0, lsf0, pcf0), SetInv (gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), 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 := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)).set ⊦ |
⊦ ls.tid = tid → gstepf(gs, ls, invInsert, ADoInsert(tid, b)) = (b ⊃ gs.set:= (gs.set ++ ls.le);gs)
( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), lsf(tid).tid = tid, pcf(tid) = invInsert, SetInv(gstate, lsf, pcf), SetInv ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; Used terms: gstate, lsf(tid), tid, b
| ⊦ ls.tid = tid → gstepf(gs, ls, invInsert, ADoInsert(tid, b)) = (b ⊃ gs.set:= (gs.set ++ ls.le);gs) |
| ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), lsf(tid).tid = tid, pcf(tid) = invInsert, SetInv(gstate, lsf, pcf), SetInv ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊦ |
( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate0, lsf0, pcf0), SetInv ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic
| ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invInsert, SetInv(gstate0, lsf0, pcf0), SetInv ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate ((b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate), lsf(tid := lstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b))), pcf(tid := pcstepf(gstate, lsf(tid), invInsert, ADoInsert(tid, b)))) ' + sl, al0), (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ (b ⊃ gstate.set:= (gstate.set ++ lsf(tid).le);gstate).set ⊦ |
Used simplifier rules: ⊦ (gs.set:= set).set = set; (s) ⊦ s ++ a ⊆ s0 ↔ s ⊆ s0 ∧ a ∈ s0; (s)
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invMember, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invMember, SetInv(gstate0, lsf0, pcf0), SetInv (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))) ' + sl, al0), gstepf(gstate, lsf(tid), invMember, ADoMember(tid)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), invMember, ADoMember(tid)).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ pre(gs, ls, invMember, a) ↔ a = ADoMember(ls.tid); (s)
| ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = invMember, SetInv(gstate0, lsf0, pcf0), SetInv (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))), SetInv(gstate, lsf, pcf), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), invMember, ADoMember(tid)), lsf(tid := lstepf(gstate, lsf(tid), invMember, ADoMember(tid))), pcf(tid := pcstepf(gstate, lsf(tid), invMember, ADoMember(tid)))) ' + sl, al0), gstepf(gstate, lsf(tid), invMember, ADoMember(tid)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), invMember, ADoMember(tid)).set ⊦ |
⊦ ls.tid = tid → gstepf(gs, ls, invMember, ADoMember(tid)) = gs
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; Used terms: gstate, lsf(tid), tid
| ⊦ ls.tid = tid → gstepf(gs, ls, invMember, ADoMember(tid)) = gs |
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retInsert, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( 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 := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), 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), 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 := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))) ' + sl, al0), gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ pre(gs, ls, retInsert, a) ↔ (∃ b0. a = ARetInsert(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s)
| ( 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 := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retInsert, SetInv(gstate0, lsf0, pcf0), 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), 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 := pcstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)))) ' + sl, al0), gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), retInsert, ARetInsert(tid, lsf(tid).lb)).set ⊦ |
⊦ ls.tid = tid → gstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = gs
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 → gstepf(gs, ls, retInsert, ARetInsert(tid, b0)) = gs |
| ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retMember, SetInv(gstate, lsf, pcf), SetInv(gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))), SetInv(gstate0, lsf0, pcf0), frag*(IOAut(setInit, setStep, setExt)) ( mkstate (gstepf(gstate, lsf(tid), pcf(tid), a), lsf(tid := lstepf(gstate, lsf(tid), pcf(tid), a)), pcf(tid := pcstepf(gstate, lsf(tid), pcf(tid), a))) ' + sl, al0), pre(gstate, lsf(tid), pcf(tid), a), gstepf(gstate, lsf(tid), pcf(tid), a).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), pcf(tid), a).set ⊦ |
( 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retMember, SetInv(gstate0, lsf0, pcf0), 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))), SetInv(gstate, lsf, pcf), 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))) ' + sl, al0), gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).set ⊦
Used simplifier rules: inv-tid: ⊦ SetInv(gstate, lsf, pcf) → lsf(tid).tid = tid; sub-ntrans-01: ⊦ s0 ⊆ s1 ∧ ¬ s ⊆ s1 → ¬ s ⊆ s0; (forward) from specification set-basic ⊦ pre(gs, ls, retMember, a) ↔ (∃ b0. a = ARetMember(ls.tid, b0) ∧ (b0 ↔ ls.lb)); (s)
| ( 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))) ' + sl ).last = mkstate(gstate0, lsf0, pcf0), pcf(tid) = retMember, SetInv(gstate0, lsf0, pcf0), 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))), SetInv(gstate, lsf, pcf), 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 := pcstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)))) ' + sl, al0), gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).set ⊆ gstate0.set, ¬ gstate.set ⊆ gstate0.set, ¬ gstate.set ⊆ gstepf(gstate, lsf(tid), retMember, ARetMember(tid, lsf(tid).lb)).set ⊦ |
⊦ ls.tid = tid → gstepf(gs, ls, retMember, ARetMember(tid, b0)) = gs
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 → gstepf(gs, ls, retMember, ARetMember(tid, b0)) = gs |
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.