Step
*
1
of Lemma
hdf-state-transformation2
1. j : ℤ
2. 0 < j
3. ∀init,L,G:Top. ∀m:ℕ.
(λmk-hdf,s0. (inl (λa.let X,s = s0
in let X',fs = case X of inl(P) => P a | inr(z) => <inr ⋅ , {}>
in let b ←─ ∪f∈fs.bag-map(f;s)
in let s' ←─ case null(b) of inl() => s | inr() => b
in <mk-hdf <X', s'>, s'>))^j - 1
⊥
<fix((λmk-hdf.(inl (λa.cbva_seq(L a; λg.<mk-hdf, G g>; m))))), init>
≤ fix((λmk-hdf,s. (inl (λa.cbva_seq(λn.if n=m + 1
then mk_lambdas_fun(λg.case null(select_fun_last(g;m))
of inl() =>
s
| inr() =>
select_fun_last(g;m);m + 1)
else if n=m
then mk_lambdas_fun(λg.∪f∈G g.bag-map(f;s);m)
else (L a n); λg.<mk-hdf select_fun_last(g;m + 1)
, select_fun_last(g;m + 1)
>; m + 2)))))
init)
4. init : Top@i
5. L : Top@i
6. G : Top@i
7. m : ℕ@i
⊢ inl (λa.let X',fs = cbva_seq(L a; λg.<fix((λmk-hdf.(inl (λa.cbva_seq(L a; λg.<mk-hdf, G g>; m))))), G g>; m)
in let b ←─ ∪f∈fs.bag-map(f;init)
in let s' ←─ case null(b) of inl() => init | inr() => b
in <λmk-hdf,s0. (inl (λa.let X,s = s0
in let X',fs = case X of inl(P) => P a | inr(z) => <inr ⋅ , {}>
in let b ←─ ∪f∈fs.bag-map(f;s)
in let s' ←─ case null(b) of inl() => s | inr() => b
in <mk-hdf <X', s'>, s'>))^j - 1
⊥
<X', s'>
, s'
>) ≤ fix((λmk-hdf,s. (inl (λa.cbva_seq(λn.if n=m + 1
then mk_lambdas_fun(λg.case null(select_fun_last(g;m))
of inl() =>
s
| inr() =>
select_fun_last(g;m);m + 1)
else if n=m
then mk_lambdas_fun(λg.∪f∈G g.bag-map(f;s);m)
else (L a n); λg.<mk-hdf select_fun_last(g;m + 1)
, select_fun_last(g;m + 1)
>; m + 2)))))
init
BY
{ (RW (AddrC [2] (UnrollLoopsOnceExceptC SqequalProcTransLst)) 0
THEN RepeatFor 2 ((SqLeCD THEN Try (Complete (Auto))))
THEN Reduce 0
THEN (RWO "cbva_seq-spread" 0 THENA Auto)
THEN RepeatFor 2 ((RWO "cbva_seq_extend" 0 THENA Auto))
THEN RepUR ``ifthenelse eq_int btrue bfalse bag-map bag-null`` 0
THEN (RW (AddrC [1;1] LiftAllC) 0 THENA Auto)
THEN Reduce 0
THEN Fold `select_fun_last` 0
THEN (Subst ⌈(m + 1) + 1 ~ m + 2⌉ 0⋅ THENA Auto')
THEN RepeatFor 3 ((SqLeCD THEN Try (Complete (Auto))))
THEN All (RepUR ``bag-map``)
THEN BackThruSomeHyp) }
Latex:
1. j : \mBbbZ{}
2. 0 < j
3. \mforall{}init,L,G:Top. \mforall{}m:\mBbbN{}.
(\mlambda{}mk-hdf,s0. (inl (\mlambda{}a.let X,s = s0
in let X',fs = case X of inl(P) => P a | inr(z) => <inr \mcdot{} , \{\}>
in let b \mleftarrow{}{} \mcup{}f\mmember{}fs.bag-map(f;s)
in let s' \mleftarrow{}{} case null(b) of inl() => s | inr() => b
in <mk-hdf <X', s'>, s'>))\^{}j - 1
\mbot{}
<fix((\mlambda{}mk-hdf.(inl (\mlambda{}a.cbva\_seq(L a; \mlambda{}g.<mk-hdf, G g> m))))), init>
\mleq{} fix((\mlambda{}mk-hdf,s.
(inl (\mlambda{}a.cbva\_seq(\mlambda{}n.if n=m + 1
then mk\_lambdas\_fun(\mlambda{}g.case null(...)
of inl() =>
s
| inr() =>
select\_fun\_last(g;m);m + 1)
else if n=m
then mk\_lambdas\_fun(\mlambda{}g.\mcup{}f\mmember{}G g.bag-map(f;s);m)
else (L a n); \mlambda{}g.<mk-hdf
select\_fun\_last(g;m + 1)
, select\_fun\_last(g;m + 1)
> m + 2)))))
init)
4. init : Top@i
5. L : Top@i
6. G : Top@i
7. m : \mBbbN{}@i
\mvdash{} inl (\mlambda{}a.let X',fs = cbva\_seq(L a; \mlambda{}g.<fix((\mlambda{}mk-hdf.(inl (\mlambda{}a.cbva\_seq(L a; \mlambda{}g.<mk-hdf, G g> m)))))
, G g
> m)
in let b \mleftarrow{}{} \mcup{}f\mmember{}fs.bag-map(f;init)
in let s' \mleftarrow{}{} case null(b) of inl() => init | inr() => b
in <\mlambda{}mk-hdf,s0. (inl (\mlambda{}a.let X,s = s0
in let X',fs = case X
of inl(P) =>
P a
| inr(z) =>
<inr \mcdot{} , \{\}>
in let b \mleftarrow{}{} \mcup{}f\mmember{}fs.bag-map(f;s)
in let s' \mleftarrow{}{} case null(b) of inl() => s | inr() => b
in <mk-hdf <X', s'>, s'>))\^{}j - 1
\mbot{}
<X', s'>
, s'
>)
\mleq{} fix((\mlambda{}mk-hdf,s. (inl (\mlambda{}a.cbva\_seq(\mlambda{}n.if n=m + 1
then mk\_lambdas\_fun(\mlambda{}g.case null(select\_fun\_last(g;m))
of inl() =>
s
| inr() =>
select\_fun\_last(g;m);m + 1)
else if n=m
then mk\_lambdas\_fun(\mlambda{}g.\mcup{}f\mmember{}G g.bag-map(f;s);m)
else (L a n); \mlambda{}g.<mk-hdf
select\_fun\_last(g;m + 1)
, select\_fun\_last(g;m + 1)
> m + 2)))))
init
By
(RW (AddrC [2] (UnrollLoopsOnceExceptC SqequalProcTransLst)) 0
THEN RepeatFor 2 ((SqLeCD THEN Try (Complete (Auto))))
THEN Reduce 0
THEN (RWO "cbva\_seq-spread" 0 THENA Auto)
THEN RepeatFor 2 ((RWO "cbva\_seq\_extend" 0 THENA Auto))
THEN RepUR ``ifthenelse eq\_int btrue bfalse bag-map bag-null`` 0
THEN (RW (AddrC [1;1] LiftAllC) 0 THENA Auto)
THEN Reduce 0
THEN Fold `select\_fun\_last` 0
THEN (Subst \mkleeneopen{}(m + 1) + 1 \msim{} m + 2\mkleeneclose{} 0\mcdot{} THENA Auto')
THEN RepeatFor 3 ((SqLeCD THEN Try (Complete (Auto))))
THEN All (RepUR ``bag-map``)
THEN BackThruSomeHyp)
Home
Index