Thm* s:(A+B) List, x:A. (x mapoutl(s))  ( y:A+B. (y s) & isl(y) & x = outl(y)) | [member_mapoutl] |
Thm* P:(T  ), T':Type, f:({x:T| P(x) } T'), L:T List, x,y:{x:T| P(x) }. x before y L  f(x) before f(y) mapfilter(f;P;L) | [mapfilter_before] |
Thm* R:(A A' Prop), P:(B A  ), P':(B A'  ), F,G,H:(B A A), F',G',H':(B A' A'), N:(B A (B List)), N':(B A' (B List)), M:(A  ), M':(A'  ). ( i:B, s:A. P(i,s)  M(F(i,s)) M(s))  ( i:B, s:A. M(G(i,s)) M(s))  ( i:B, s:A. P(i,s)  M(H(i,s)) < M(s))  ( i:B, s:A'. P'(i,s)  M'(F'(i,s)) M'(s))  ( i:B, s:A'. M'(G'(i,s)) M'(s))  ( i:B, s:A'. P'(i,s)  M'(H'(i,s)) < M'(s))  ( j:B, u:A, v:A'. R(u,v)  (P(j,u)  P'(j,v)))  ( j:B, u:A, v:A'. R(u,v)  P(j,u)  P'(j,v)  R(F(j,u),F'(j,v)))  ( j:B, u:A, v:A'. R(u,v)  P(j,u)  P'(j,v)  R(H(j,u),H'(j,v)))  ( j:B, u:A, v:A'. R(u,v)  R(G(j,u),G'(j,v)))  ( j:B, u:A, v:A'. R(u,v)  N(j,u) = N'(j,v))  ( j:B, u:A, v:A'. R(u,v)  R(process u j where process s i == if P(i,s) then F(i,s) else G(i,s) where xs := N(i,s); s:= H(i,s); while not null xs { s := process s (hd xs); xs := tl xs; } ,process v j where process s i == if P'(i,s) then F'(i,s) else G'(i,s) where xs := N'(i,s); s:= H'(i,s); while not null xs { s := process s (hd xs); xs := tl xs; } )) | [accumulate-rel] |
Thm* M:(A  ), Q:(B A A Prop), P:(B A  ), F,G,H:(B A A), N:(B A (B List)). ( i:B, s:A. P(i,s)  M(F(i,s)) M(s))  ( i:B, s:A. M(G(i,s)) M(s))  ( i:B, s:A. P(i,s)  M(H(i,s)) < M(s))  ( j:B, u:A. P(j,u)  Q(j,u,F(j,u)))  ( j:B, u,z:A. P(j,u)  Q(j,H(j,u),z)  Q(j,u,G(j,z)))  ( j:B, u:A. Q(j,u,u))  ( i,j:B, u,v,z:A. Q(i,u,v)  Q(j,v,z)  Q(j,u,z))  ( j:B, u:A. Q(j,u,process u j where process s i == if P(i,s) then F(i,s) else G(i,s) where xs := N(i,s); s:= H(i,s); while not null xs { s := process s (hd xs); xs := tl xs; } )) | [accumulate-induction1] |
Thm* A,B:Type, P:(B A  ), F,G,H:(B A A), N:(B A (B List)), M:(A  ). ( i:B, s:A. P(i,s)  M(F(i,s)) M(s))  ( i:B, s:A. M(G(i,s)) M(s))  ( i:B, s:A. P(i,s)  M(H(i,s)) < M(s))  ( j:B, u:A. process u j where process s i == if P(i,s) then F(i,s) else G(i,s) where xs := N(i,s); s:= H(i,s); while not null xs { s := process s (hd xs); xs := tl xs; } {s:A| M(s) M(u) }) | [accumulate_wf] |
Thm* P:(T  ), T':Type, f:({x:T| P(x) } T'), L1,L2:T List. mapfilter(f;P;L1 @ L2) = (mapfilter(f;P;L1) @ mapfilter(f;P;L2)) | [mapfilter_append] |
Thm* L:T List, P:(T  ). ( x L.P(x))  ( i: ||L||. P(L[i])) | [assert_l_bexists] |
Thm* L:T List, P:(T  ). ( x L.P(x))  ( i: ||L||. P(L[i])) | [assert_l_ball] |