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