| apebs[m] = mkpeb(aehdr, avidhdr(v, m0, m1, m2, m4), buf, m3, false), m < # apebs, valid-global-sqn(subarray(apebs, 0, m), n), valid-peb(apebs[m]) ⊦ valid-global-sqn(subarray(apebs, 0, m + 1), max(n, m1 + 1)) |
apebs[m] = mkpeb(aehdr, avidhdr(v, m0, m1, m2, m4), buf, m3, false), m < # apebs, valid-peb(mkpeb(aehdr, avidhdr(v, m0, m1, m2, m4), buf, m3, false)), max(n, m1 + 1) ≤ (valid-sqns(v0, m5, apebs, m) ∪ (valid-peb(v0, m5, mkpeb(aehdr, avidhdr(v, m0, m1, m2, m4), buf, m3, false)) ⊃ {m1} ;∅)).max, ∀ v0, m5. valid-sqns(v0, m5, apebs, m) ≠ ∅ → valid-sqns(v0, m5, apebs, m).max < n ⊦ valid-sqns(v0, m5, apebs, m) ∪ (valid-peb(v0, m5, mkpeb(aehdr, avidhdr(v, m0, m1, m2, m4), buf, m3, false)) ⊃ {m1} ;∅) = ∅
Used simplifier rules: valid-global-sqn: ⊦ valid-global-sqn(apebs, n) ↔ (∀ v, m. valid-sqns(v, m, apebs) ≠ ∅ → n > valid-sqns(v, m, apebs).max);% ⊦ avidhdr(v, m, m0, m1, m2).sqn = m0; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).vidhdr = avhdr; (s)% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%⊦ n < # apebs → valid-sqns(v, m, apebs, n + 1) = valid-sqns(v, m, apebs, n) ∪ (valid-peb(v, m, apebs[n]) ⊃ {apebs[n].vidhdr.sqn} ;∅); (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m + 1 ≤ n ↔ m < n; (s)% ⊦ m > n ↔ n < m; (s)%n ≤ # apebs ⊦ valid-sqns(v, m, subarray(apebs, 0, n)) = valid-sqns(v, m, apebs, n); (s)% ⊦ m < n → m ≤ n; (s)