Step * 2 1 1 of Lemma accum_split_wf


1. Type
2. Type
3. (T List × A) ⟶ 𝔹
4. (T List × A) ⟶ A
5. A
6. : ℕ
7. List
8. ¬↑null(L)
9. {p:(T List × A) List × List × A| let LL,L2 in is_accum_splitting(T;A;firstn(||L|| 1;L);LL;L2;f;g;x)} 
⊢ accumulate (with value and list item v):
   let LL,L2,z in 
   if null(L2) then <LL, [v], z>
   if f <L2, z> then <LL [<L2, z>], [v], g <L2, z>>
   else <LL, L2 [v], z>
   fi 
  over list:
    [last(L)]
  with starting value:
   v) ∈ {p:(T List × A) List × List × A| 
         let LL,L2 
         in is_accum_splitting(T;A;firstn(||L|| 1;L) [last(L)];LL;L2;f;g;x)} 
BY
(D -1
   THEN RepeatFor ((D -2 THEN All Reduce))
   THEN RepUR ``is_accum_splitting`` -1
   THEN MemTypeCD
   THEN Reduce 0
   THEN Auto
   THEN (SplitOnConclITE THENA Auto)
   THEN Reduce 0) }

1
1. Type
2. Type
3. (T List × A) ⟶ 𝔹
4. (T List × A) ⟶ A
5. A
6. : ℕ
7. List
8. ¬↑null(L)
9. v1 (T List × A) List
10. v3 List
11. v4 A
12. firstn(||L|| 1;L) (concat(map(λp.(fst(p));v1)) v3) ∈ (T List)
13. (∀L'∈v1.(↑(f L'))
        ∧ (¬↑null(fst(L')))
        ∧ (∀S:T List. ((¬↑null(S))  S ≤ fst(L')  (S (fst(L')) ∈ (T List)))  (¬↑(f <S, snd(L')>)))))
14. (¬↑null(firstn(||L|| 1;L)))  (¬↑null(v3))
15. ∀S:T List. ((¬↑null(S))  S ≤ v3  (S v3 ∈ (T List)))  (¬↑(f <S, v4>)))
16. (snd(hd(v1 [<v3, v4>]))) x ∈ A
17. ∀i:ℕ||v1||. ((snd(v1 [<v3, v4>][i 1])) (g v1[i]) ∈ A)
18. v3 [] ∈ (T List)
⊢ is_accum_splitting(T;A;firstn(||L|| 1;L) [last(L)];v1;<[last(L)], v4>;f;g;x)

2
.....falsecase..... 
1. Type
2. Type
3. (T List × A) ⟶ 𝔹
4. (T List × A) ⟶ A
5. A
6. : ℕ
7. List
8. ¬↑null(L)
9. v1 (T List × A) List
10. v3 List
11. v4 A
12. firstn(||L|| 1;L) (concat(map(λp.(fst(p));v1)) v3) ∈ (T List)
13. (∀L'∈v1.(↑(f L'))
        ∧ (¬↑null(fst(L')))
        ∧ (∀S:T List. ((¬↑null(S))  S ≤ fst(L')  (S (fst(L')) ∈ (T List)))  (¬↑(f <S, snd(L')>)))))
14. (¬↑null(firstn(||L|| 1;L)))  (¬↑null(v3))
15. ∀S:T List. ((¬↑null(S))  S ≤ v3  (S v3 ∈ (T List)))  (¬↑(f <S, v4>)))
16. (snd(hd(v1 [<v3, v4>]))) x ∈ A
17. ∀i:ℕ||v1||. ((snd(v1 [<v3, v4>][i 1])) (g v1[i]) ∈ A)
18. ¬(v3 [] ∈ (T List))
⊢ let LL,L2 if f <v3, v4> then <v1 [<v3, v4>], [last(L)], g <v3, v4>> else <v1, v3 [last(L)], v4> fi  
  in is_accum_splitting(T;A;firstn(||L|| 1;L) [last(L)];LL;L2;f;g;x)


Latex:


Latex:

1.  A  :  Type
2.  T  :  Type
3.  f  :  (T  List  \mtimes{}  A)  {}\mrightarrow{}  \mBbbB{}
4.  g  :  (T  List  \mtimes{}  A)  {}\mrightarrow{}  A
5.  x  :  A
6.  n  :  \mBbbN{}
7.  L  :  T  List
8.  \mneg{}\muparrow{}null(L)
9.  v  :  \{p:(T  List  \mtimes{}  A)  List  \mtimes{}  T  List  \mtimes{}  A| 
                let  LL,L2  =  p 
                in  is\_accum\_splitting(T;A;firstn(||L||  -  1;L);LL;L2;f;g;x)\} 
\mvdash{}  accumulate  (with  value  p  and  list  item  v):
      let  LL,L2,z  =  p  in 
      if  null(L2)  then  <LL,  [v],  z>
      if  f  <L2,  z>  then  <LL  @  [<L2,  z>],  [v],  g  <L2,  z>>
      else  <LL,  L2  @  [v],  z>
      fi 
    over  list:
        [last(L)]
    with  starting  value:
      v)  \mmember{}  \{p:(T  List  \mtimes{}  A)  List  \mtimes{}  T  List  \mtimes{}  A| 
                  let  LL,L2  =  p 
                  in  is\_accum\_splitting(T;A;firstn(||L||  -  1;L)  @  [last(L)];LL;L2;f;g;x)\} 


By


Latex:
(D  -1
  THEN  RepeatFor  2  ((D  -2  THEN  All  Reduce))
  THEN  RepUR  ``is\_accum\_splitting``  -1
  THEN  MemTypeCD
  THEN  Reduce  0
  THEN  Auto
  THEN  (SplitOnConclITE  THENA  Auto)
  THEN  Reduce  0)




Home Index