Step
*
of Lemma
process-ordered-message_wf
∀[M:Type]. ∀[nL:n:ℕ × {L:({n + 1...} × M) List| sorted-by(λx,y. fst(x) < fst(y);L)} ]. ∀[km:ℕ × M].
(process-ordered-message(nL;km) ∈ {tr:({fst(nL)...} × M) List × n:{fst(nL)...} × (({n + 1...} × M) List)|
let out,n',L' = tr in
sorted-by(λx,y. fst(x) < fst(y);L')
∧ (0 < ||out||
⇒ (((fst(km)) = (fst(nL)) ∈ ℤ) ∧ (hd(out) = km ∈ (ℕ × M))))
∧ (((fst(nL)) = (fst(km)) ∈ ℤ)
⇒ ([km / (snd(nL))] = (out @ L') ∈ (({fst(nL)...} × M) List)))
∧ (fst(nL) < fst(km)
⇒ (insert-ordered-message(snd(nL);km)
= (out @ L')
∈ (({(fst(nL)) + 1...} × M) List)))
∧ (fst(km) < fst(nL)
⇒ ((↑null(out)) ∧ (L' = (snd(nL)) ∈ (({(fst(nL)) + 1...} × M) List))))} )
BY
{ ((Intros THEN Unhide)
THEN D -2
THEN D -1
THEN RepUR ``process-ordered-message`` 0
THEN RenameVar `L' (-3)
THEN (Decide ⌜n < k1⌝⋅ THENA Auto)
THEN (Reduce 0 THENA Auto)) }
1
1. M : Type
2. n : ℕ
3. L : {L:({n + 1...} × M) List| sorted-by(λx,y. fst(x) < fst(y);L)}
4. k1 : ℕ
5. k2 : M
6. n < k1
⊢ eval L' = eval_list(insert-ordered-message(L;<k1, k2>)) in
<[], n, L'> ∈ {tr:({n...} × M) List × n:{n...} × (({n + 1...} × M) List)|
let out,n',L' = tr in
sorted-by(λx,y. fst(x) < fst(y);L')
∧ (0 < ||out||
⇒ ((k1 = n ∈ ℤ) ∧ (hd(out) = <k1, k2> ∈ (ℕ × M))))
∧ ((n = k1 ∈ ℤ)
⇒ ([<k1, k2> / L] = (out @ L') ∈ (({n...} × M) List)))
∧ (n < k1
⇒ (insert-ordered-message(L;<k1, k2>) = (out @ L') ∈ (({n + 1...} × M) List)))
∧ (k1 < n
⇒ ((↑null(out)) ∧ (L' = L ∈ (({n + 1...} × M) List))))}
2
1. M : Type
2. n : ℕ
3. L : {L:({n + 1...} × M) List| sorted-by(λx,y. fst(x) < fst(y);L)}
4. k1 : ℕ
5. k2 : M
6. ¬n < k1
⊢ if (k1) < (n)
then <[], n, L>
else eval sn = n + 1 in
if null(L) ∨bsn <z fst(hd(L))
then <[<k1, k2>], sn, L>
else let L1,L2 = split-maximal-consecutive(λp.(fst(p));L)
in eval n' = fst(last(L1)) in
<[<k1, k2> / L1], n', L2>
fi ∈ {tr:({n...} × M) List × n:{n...} × (({n + 1...} × M) List)|
let out,n',L' = tr in
sorted-by(λx,y. fst(x) < fst(y);L')
∧ (0 < ||out||
⇒ ((k1 = n ∈ ℤ) ∧ (hd(out) = <k1, k2> ∈ (ℕ × M))))
∧ ((n = k1 ∈ ℤ)
⇒ ([<k1, k2> / L] = (out @ L') ∈ (({n...} × M) List)))
∧ (n < k1
⇒ (insert-ordered-message(L;<k1, k2>) = (out @ L') ∈ (({n + 1...} × M) List)))
∧ (k1 < n
⇒ ((↑null(out)) ∧ (L' = L ∈ (({n + 1...} × M) List))))}
Latex:
Latex:
\mforall{}[M:Type]. \mforall{}[nL:n:\mBbbN{} \mtimes{} \{L:(\{n + 1...\} \mtimes{} M) List| sorted-by(\mlambda{}x,y. fst(x) < fst(y);L)\} ]. \mforall{}[km:\mBbbN{} \mtimes{} M].
(process-ordered-message(nL;km) \mmember{} \{tr:(\{fst(nL)...\} \mtimes{} M) List
\mtimes{} n:\{fst(nL)...\}
\mtimes{} ((\{n + 1...\} \mtimes{} M) List)|
let out,n',L' = tr in
sorted-by(\mlambda{}x,y. fst(x) < fst(y);L')
\mwedge{} (0 < ||out|| {}\mRightarrow{} (((fst(km)) = (fst(nL))) \mwedge{} (hd(out) = km)))
\mwedge{} (((fst(nL)) = (fst(km))) {}\mRightarrow{} ([km / (snd(nL))] = (out @ L')))
\mwedge{} (fst(nL) < fst(km)
{}\mRightarrow{} (insert-ordered-message(snd(nL);km) = (out @ L')))
\mwedge{} (fst(km) < fst(nL) {}\mRightarrow{} ((\muparrow{}null(out)) \mwedge{} (L' = (snd(nL)))))\} )
By
Latex:
((Intros THEN Unhide)
THEN D -2
THEN D -1
THEN RepUR ``process-ordered-message`` 0
THEN RenameVar `L' (-3)
THEN (Decide \mkleeneopen{}n < k1\mkleeneclose{}\mcdot{} THENA Auto)
THEN (Reduce 0 THENA Auto))
Home
Index