Step
*
2
2
1
of Lemma
list_split_wf
1. T : Type
2. f : (T List) ⟶ 𝔹
3. n : ℕ
4. L : T List
5. ∀L1:T List
     (||L1|| < ||L||
     
⇒ (list_split(f;L1) ∈ {p:T List List × (T List)| let LL,L2 = p in is_list_splitting(T;L1;LL;L2;f)} ))
6. ¬↑null(L)
7. list_split(f;firstn(||L|| - 1;L)) ∈ {p:T List List × (T List)| 
                                        let LL,L2 = p 
                                        in is_list_splitting(T;firstn(||L|| - 1;L);LL;L2;f)} 
⊢ list_split(f;firstn(||L|| - 1;L) @ [last(L)]) ∈ {p:T List List × (T List)| 
                                                   let LL,L2 = p 
                                                   in is_list_splitting(T;firstn(||L|| - 1;L) @ [last(L)];LL;L2;f)} 
BY
{ (Thin (-3)
   THEN All (Unfold `list_split`)
   THEN (RWO "list_accum_append" 0 THENA Auto)
   THEN GenConclAtAddr [2;2]
   THEN Thin (-1)
   THEN Thin (-2)) }
1
1. T : Type
2. f : (T List) ⟶ 𝔹
3. n : ℕ
4. L : T List
5. ¬↑null(L)
6. v : {p:T List List × (T List)| let LL,L2 = p in is_list_splitting(T;firstn(||L|| - 1;L);LL;L2;f)} 
⊢ accumulate (with value p and list item v):
   let LL,L2 = p 
   in if null(L2) then <LL, [v]>
      if f L2 then <LL @ [L2], [v]>
      else <LL, L2 @ [v]>
      fi 
  over list:
    [last(L)]
  with starting value:
   v) ∈ {p:T List List × (T List)| let LL,L2 = p in is_list_splitting(T;firstn(||L|| - 1;L) @ [last(L)];LL;L2;f)} 
Latex:
Latex:
1.  T  :  Type
2.  f  :  (T  List)  {}\mrightarrow{}  \mBbbB{}
3.  n  :  \mBbbN{}
4.  L  :  T  List
5.  \mforall{}L1:T  List
          (||L1||  <  ||L||
          {}\mRightarrow{}  (list\_split(f;L1)  \mmember{}  \{p:T  List  List  \mtimes{}  (T  List)| 
                                                          let  LL,L2  =  p 
                                                          in  is\_list\_splitting(T;L1;LL;L2;f)\}  ))
6.  \mneg{}\muparrow{}null(L)
7.  list\_split(f;firstn(||L||  -  1;L))  \mmember{}  \{p:T  List  List  \mtimes{}  (T  List)| 
                                                                                let  LL,L2  =  p 
                                                                                in  is\_list\_splitting(T;firstn(||L||  -  1;L);LL;L2;f)\} 
\mvdash{}  list\_split(f;firstn(||L||  -  1;L)  @  [last(L)])  \mmember{}  \{p:T  List  List  \mtimes{}  (T  List)| 
                                                                                                      let  LL,L2  =  p 
                                                                                                      in  is\_list\_splitting(T;firstn(||L||  -  1;L)
                                                                                                            @  [last(L)];LL;L2;f)\} 
By
Latex:
(Thin  (-3)
  THEN  All  (Unfold  `list\_split`)
  THEN  (RWO  "list\_accum\_append"  0  THENA  Auto)
  THEN  GenConclAtAddr  [2;2]
  THEN  Thin  (-1)
  THEN  Thin  (-2))
Home
Index