Step
*
2
of Lemma
hdf-state-transformation2
1. j : ℤ
2. 0 < j
3. ∀init,L,G:Top. ∀m:ℕ.
(λ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)))^j - 1
⊥
init ≤ fix((λ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'>))))
<fix((λmk-hdf.(inl (λa.cbva_seq(L a; λg.<mk-hdf, G g>; m))))), init>)
4. init : Top@i
5. L : Top@i
6. G : Top@i
7. m : ℕ@i
⊢ inl (λa.cbva_seq(λn.if n=m + 1
then mk_lambdas_fun(λg.case null(select_fun_last(g;m))
of inl() =>
init
| inr() =>
select_fun_last(g;m);m + 1)
else if n=m then mk_lambdas_fun(λg.∪f∈G g.bag-map(f;init);m) else (L a n);
λg.<λ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)))^j - 1
⊥
select_fun_last(g;m + 1)
, select_fun_last(g;m + 1)
>; m + 2)) ≤ fix((λ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'>))))
<fix((λmk-hdf.(inl (λa.cbva_seq(L a; λg.<mk-hdf, G g>; m))))), init>
BY
{ (RW (AddrC [2;1] UnrollLoopsC) 0
THEN Reduce 0
THEN RepeatFor 2 ((SqLeCD THEN Try (Complete (Auto))))
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`` 0
THEN (RW (AddrC [2;1] LiftAllC) 0 THENA Auto)
THEN All (RepUR ``bag-map ifthenelse``)
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 BackThruSomeHyp) }
Latex:
1. j : \mBbbZ{}
2. 0 < j
3. \mforall{}init,L,G:Top. \mforall{}m:\mBbbN{}.
(\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)))\^{}j - 1
\mbot{}
init \mleq{} fix((\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'>))))
<fix((\mlambda{}mk-hdf.(inl (\mlambda{}a.cbva\_seq(L a; \mlambda{}g.<mk-hdf, G g> m))))), init>)
4. init : Top@i
5. L : Top@i
6. G : Top@i
7. m : \mBbbN{}@i
\mvdash{} 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() =>
init
| 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;init);m)
else (L a n);
\mlambda{}g.<\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() =>
...;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)))\^{}j - 1
\mbot{}
select\_fun\_last(g;m + 1)
, select\_fun\_last(g;m + 1)
> m + 2)) \mleq{} fix((\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'>))))
<fix((\mlambda{}mk-hdf.(inl (\mlambda{}a.cbva\_seq(L a; \mlambda{}g.<mk-hdf, G g> m)))))
, init
>
By
(RW (AddrC [2;1] UnrollLoopsC) 0
THEN Reduce 0
THEN RepeatFor 2 ((SqLeCD THEN Try (Complete (Auto))))
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`` 0
THEN (RW (AddrC [2;1] LiftAllC) 0 THENA Auto)
THEN All (RepUR ``bag-map ifthenelse``)
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 BackThruSomeHyp)
Home
Index