| m < # apebs, valid-global-sqn(subarray(apebs, 0, m), n) ⊦ valid-global-sqn(subarray(apebs, 0, m + 1), n) ↔ ¬ valid-peb(apebs[m]) ∨ apebs[m].vidhdr.sqn < n |
m < # apebs, ∀ v, m0. valid-sqns(v, m0, apebs, m) ≠ ∅ → valid-sqns(v, m0, apebs, m).max < n ⊦ (∀ v, m0. valid-sqns(v, m0, apebs, m) ∪ (valid-peb(v, m0, apebs[m]) ⊃ {apebs[m].vidhdr.sqn} ;∅) ≠ ∅ → (valid-sqns(v, m0, apebs, m) ∪ (valid-peb(v, m0, apebs[m]) ⊃ {apebs[m].vidhdr.sqn} ;∅)).max < n) ↔ ¬ valid-peb(apebs[m]) ∨ apebs[m].vidhdr.sqn < n
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);% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m < n → m ≤ n; (s)% ⊦ m > n ↔ n < m; (s)%⊦ 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)%n ≤ # apebs ⊦ valid-sqns(v, m, subarray(apebs, 0, n)) = valid-sqns(v, m, apebs, n); (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)