Step
*
1
1
1
1
of Lemma
combine-list-as-reduce
1. A : Type
2. f : A ⟶ A ⟶ A
3. Assoc(A;λx,y. f[x;y])
4. Comm(A;λx,y. f[x;y])
5. L : A List
6. ∀L:A List. (0 < ||L|| 
⇒ (isl(reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L)) ~ tt))
7. n : A@i
8. outl(reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L @ [n])) ∈ A
⊢ combine-list(x,y.f[x;y];L @ [n]) = outl(reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L @ [n]))\000C ∈ A
BY
{ (TACTIC:(RWO "combine-list-append" 0 THEN Auto')
   THEN Subst ⌜reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L @ [n])
               = (inl combine-list(x,y.f[x;y];[n / L]))
               ∈ {z:A?| ↑isl(z)} ⌝ 0⋅
   THEN Reduce 0
   THEN Auto') }
1
.....equality..... 
1. A : Type
2. f : A ⟶ A ⟶ A
3. Assoc(A;λx,y. f[x;y])
4. Comm(A;λx,y. f[x;y])
5. L : A List
6. ∀L:A List. (0 < ||L|| 
⇒ (isl(reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L)) ~ tt))
7. n : A@i
8. outl(reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L @ [n])) ∈ A
⊢ reduce(λx,y. case y of inl(z) => inl f[x;z] | inr(z) => inl x;inr ⋅ L @ [n])
= (inl combine-list(x,y.f[x;y];[n / L]))
∈ {z:A?| ↑isl(z)} 
Latex:
Latex:
1.  A  :  Type
2.  f  :  A  {}\mrightarrow{}  A  {}\mrightarrow{}  A
3.  Assoc(A;\mlambda{}x,y.  f[x;y])
4.  Comm(A;\mlambda{}x,y.  f[x;y])
5.  L  :  A  List
6.  \mforall{}L:A  List
          (0  <  ||L||  {}\mRightarrow{}  (isl(reduce(\mlambda{}x,y.  case  y  of  inl(z)  =>  inl  f[x;z]  |  inr(z)  =>  inl  x;inr  \mcdot{}  ;L))  \msim{}  t\000Ct))
7.  n  :  A@i
8.  outl(reduce(\mlambda{}x,y.  case  y  of  inl(z)  =>  inl  f[x;z]  |  inr(z)  =>  inl  x;inr  \mcdot{}  ;L  @  [n]))  \mmember{}  A
\mvdash{}  combine-list(x,y.f[x;y];L  @  [n])
=  outl(reduce(\mlambda{}x,y.  case  y  of  inl(z)  =>  inl  f[x;z]  |  inr(z)  =>  inl  x;inr  \mcdot{}  ;L  @  [n]))
By
Latex:
(TACTIC:(RWO  "combine-list-append"  0  THEN  Auto')
  THEN  Subst  \mkleeneopen{}reduce(\mlambda{}x,y.  case  y  of  inl(z)  =>  inl  f[x;z]  |  inr(z)  =>  inl  x;inr  \mcdot{}  ;L  @  [n])
                          =  (inl  combine-list(x,y.f[x;y];[n  /  L]))\mkleeneclose{}  0\mcdot{}
  THEN  Reduce  0
  THEN  Auto')
Home
Index