Step
*
2
1
of Lemma
accum_split_wf
1. A : Type
2. T : Type
3. f : (T List × A) ⟶ 𝔹
4. g : (T List × A) ⟶ A
5. x : A
6. n : ℕ
7. L : T List
8. ∀L1:T List
(||L1|| < ||L||
⇒ (accum_split(g;x;f;L1) ∈ {p:(T List × A) List × T List × A|
let LL,L2 = p
in is_accum_splitting(T;A;L1;LL;L2;f;g;x)} ))
9. ¬↑null(L)
10. accum_split(g;x;f;firstn(||L|| - 1;L)) ∈ {p:(T List × A) List × T List × A|
let LL,L2 = p
in is_accum_splitting(T;A;firstn(||L|| - 1;L);LL;L2;f;g;x)}
⊢ accum_split(g;x;f;firstn(||L|| - 1;L) @ [last(L)]) ∈ {p:(T List × A) List × T List × A|
let LL,L2 = p
in is_accum_splitting(T;A;firstn(||L|| - 1;L)
@ [last(L)];LL;L2;f;g;x)}
BY
{ (Thin (-3)
THEN All (Unfold `accum_split`)
THEN (RWO "list_accum_append" 0 THENA Auto)
THEN GenConclAtAddr [2;2]
THEN Thin (-1)
THEN Thin (-2)) }
1
1. A : Type
2. T : Type
3. f : (T List × A) ⟶ 𝔹
4. g : (T List × A) ⟶ A
5. x : A
6. n : ℕ
7. L : T List
8. ¬↑null(L)
9. v : {p:(T List × A) List × T List × A| let LL,L2 = p in is_accum_splitting(T;A;firstn(||L|| - 1;L);LL;L2;f;g;x)}
⊢ 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) ∈ {p:(T List × A) List × T List × A|
let LL,L2 = p
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. \mforall{}L1:T List
(||L1|| < ||L||
{}\mRightarrow{} (accum\_split(g;x;f;L1) \mmember{} \{p:(T List \mtimes{} A) List \mtimes{} T List \mtimes{} A|
let LL,L2 = p
in is\_accum\_splitting(T;A;L1;LL;L2;f;g;x)\} ))
9. \mneg{}\muparrow{}null(L)
10. accum\_split(g;x;f;firstn(||L|| - 1;L)) \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);LL;L2;f;g;x)\}
\mvdash{} accum\_split(g;x;f;firstn(||L|| - 1;L) @ [last(L)]) \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:
(Thin (-3)
THEN All (Unfold `accum\_split`)
THEN (RWO "list\_accum\_append" 0 THENA Auto)
THEN GenConclAtAddr [2;2]
THEN Thin (-1)
THEN Thin (-2))
Home
Index