MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  isumshft Structured version   Visualization version   Unicode version

Theorem isumshft 13946
Description: Index shift of an infinite sum. (Contributed by Paul Chapman, 31-Oct-2007.) (Revised by Mario Carneiro, 24-Apr-2014.)
Hypotheses
Ref Expression
isumshft.1  |-  Z  =  ( ZZ>= `  M )
isumshft.2  |-  W  =  ( ZZ>= `  ( M  +  K ) )
isumshft.3  |-  ( j  =  ( K  +  k )  ->  A  =  B )
isumshft.4  |-  ( ph  ->  K  e.  ZZ )
isumshft.5  |-  ( ph  ->  M  e.  ZZ )
isumshft.6  |-  ( (
ph  /\  j  e.  W )  ->  A  e.  CC )
Assertion
Ref Expression
isumshft  |-  ( ph  -> 
sum_ j  e.  W  A  =  sum_ k  e.  Z  B )
Distinct variable groups:    A, k    j, k, K    ph, j, k   
j, W, k    B, j    k, Z
Allowed substitution hints:    A( j)    B( k)    M( j, k)    Z( j)

Proof of Theorem isumshft
Dummy variables  m  n  x are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 isumshft.5 . . . . . . . . 9  |-  ( ph  ->  M  e.  ZZ )
2 isumshft.4 . . . . . . . . 9  |-  ( ph  ->  K  e.  ZZ )
31, 2zaddcld 11073 . . . . . . . 8  |-  ( ph  ->  ( M  +  K
)  e.  ZZ )
4 isumshft.2 . . . . . . . . . 10  |-  W  =  ( ZZ>= `  ( M  +  K ) )
54eleq2i 2532 . . . . . . . . 9  |-  ( m  e.  W  <->  m  e.  ( ZZ>= `  ( M  +  K ) ) )
62zcnd 11070 . . . . . . . . . . 11  |-  ( ph  ->  K  e.  CC )
7 eluzelcn 11199 . . . . . . . . . . . 12  |-  ( m  e.  ( ZZ>= `  ( M  +  K )
)  ->  m  e.  CC )
87, 4eleq2s 2558 . . . . . . . . . . 11  |-  ( m  e.  W  ->  m  e.  CC )
9 isumshft.1 . . . . . . . . . . . . . 14  |-  Z  =  ( ZZ>= `  M )
10 fvex 5898 . . . . . . . . . . . . . 14  |-  ( ZZ>= `  M )  e.  _V
119, 10eqeltri 2536 . . . . . . . . . . . . 13  |-  Z  e. 
_V
1211mptex 6161 . . . . . . . . . . . 12  |-  ( k  e.  Z  |->  B )  e.  _V
1312shftval 13186 . . . . . . . . . . 11  |-  ( ( K  e.  CC  /\  m  e.  CC )  ->  ( ( ( k  e.  Z  |->  B ) 
shift  K ) `  m
)  =  ( ( k  e.  Z  |->  B ) `  ( m  -  K ) ) )
146, 8, 13syl2an 484 . . . . . . . . . 10  |-  ( (
ph  /\  m  e.  W )  ->  (
( ( k  e.  Z  |->  B )  shift  K ) `  m )  =  ( ( k  e.  Z  |->  B ) `
 ( m  -  K ) ) )
15 simpr 467 . . . . . . . . . . . . . . . . 17  |-  ( (
ph  /\  k  e.  Z )  ->  k  e.  Z )
16 eqid 2462 . . . . . . . . . . . . . . . . . 18  |-  ( k  e.  Z  |->  B )  =  ( k  e.  Z  |->  B )
1716fvmpt2i 5979 . . . . . . . . . . . . . . . . 17  |-  ( k  e.  Z  ->  (
( k  e.  Z  |->  B ) `  k
)  =  (  _I 
`  B ) )
1815, 17syl 17 . . . . . . . . . . . . . . . 16  |-  ( (
ph  /\  k  e.  Z )  ->  (
( k  e.  Z  |->  B ) `  k
)  =  (  _I 
`  B ) )
19 eluzelcn 11199 . . . . . . . . . . . . . . . . . . . . 21  |-  ( k  e.  ( ZZ>= `  M
)  ->  k  e.  CC )
2019, 9eleq2s 2558 . . . . . . . . . . . . . . . . . . . 20  |-  ( k  e.  Z  ->  k  e.  CC )
21 addcom 9845 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( K  e.  CC  /\  k  e.  CC )  ->  ( K  +  k )  =  ( k  +  K ) )
226, 20, 21syl2an 484 . . . . . . . . . . . . . . . . . . 19  |-  ( (
ph  /\  k  e.  Z )  ->  ( K  +  k )  =  ( k  +  K ) )
23 id 22 . . . . . . . . . . . . . . . . . . . . 21  |-  ( k  e.  Z  ->  k  e.  Z )
2423, 9syl6eleq 2550 . . . . . . . . . . . . . . . . . . . 20  |-  ( k  e.  Z  ->  k  e.  ( ZZ>= `  M )
)
25 eluzadd 11216 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( k  e.  ( ZZ>= `  M )  /\  K  e.  ZZ )  ->  (
k  +  K )  e.  ( ZZ>= `  ( M  +  K )
) )
2624, 2, 25syl2anr 485 . . . . . . . . . . . . . . . . . . 19  |-  ( (
ph  /\  k  e.  Z )  ->  (
k  +  K )  e.  ( ZZ>= `  ( M  +  K )
) )
2722, 26eqeltrd 2540 . . . . . . . . . . . . . . . . . 18  |-  ( (
ph  /\  k  e.  Z )  ->  ( K  +  k )  e.  ( ZZ>= `  ( M  +  K ) ) )
2827, 4syl6eleqr 2551 . . . . . . . . . . . . . . . . 17  |-  ( (
ph  /\  k  e.  Z )  ->  ( K  +  k )  e.  W )
29 isumshft.3 . . . . . . . . . . . . . . . . . 18  |-  ( j  =  ( K  +  k )  ->  A  =  B )
30 eqid 2462 . . . . . . . . . . . . . . . . . 18  |-  ( j  e.  W  |->  A )  =  ( j  e.  W  |->  A )
3129, 30fvmpti 5970 . . . . . . . . . . . . . . . . 17  |-  ( ( K  +  k )  e.  W  ->  (
( j  e.  W  |->  A ) `  ( K  +  k )
)  =  (  _I 
`  B ) )
3228, 31syl 17 . . . . . . . . . . . . . . . 16  |-  ( (
ph  /\  k  e.  Z )  ->  (
( j  e.  W  |->  A ) `  ( K  +  k )
)  =  (  _I 
`  B ) )
3318, 32eqtr4d 2499 . . . . . . . . . . . . . . 15  |-  ( (
ph  /\  k  e.  Z )  ->  (
( k  e.  Z  |->  B ) `  k
)  =  ( ( j  e.  W  |->  A ) `  ( K  +  k ) ) )
3433ralrimiva 2814 . . . . . . . . . . . . . 14  |-  ( ph  ->  A. k  e.  Z  ( ( k  e.  Z  |->  B ) `  k )  =  ( ( j  e.  W  |->  A ) `  ( K  +  k )
) )
35 nffvmpt1 5896 . . . . . . . . . . . . . . . 16  |-  F/_ k
( ( k  e.  Z  |->  B ) `  n )
3635nfeq1 2616 . . . . . . . . . . . . . . 15  |-  F/ k ( ( k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `  ( K  +  n )
)
37 fveq2 5888 . . . . . . . . . . . . . . . 16  |-  ( k  =  n  ->  (
( k  e.  Z  |->  B ) `  k
)  =  ( ( k  e.  Z  |->  B ) `  n ) )
38 oveq2 6323 . . . . . . . . . . . . . . . . 17  |-  ( k  =  n  ->  ( K  +  k )  =  ( K  +  n ) )
3938fveq2d 5892 . . . . . . . . . . . . . . . 16  |-  ( k  =  n  ->  (
( j  e.  W  |->  A ) `  ( K  +  k )
)  =  ( ( j  e.  W  |->  A ) `  ( K  +  n ) ) )
4037, 39eqeq12d 2477 . . . . . . . . . . . . . . 15  |-  ( k  =  n  ->  (
( ( k  e.  Z  |->  B ) `  k )  =  ( ( j  e.  W  |->  A ) `  ( K  +  k )
)  <->  ( ( k  e.  Z  |->  B ) `
 n )  =  ( ( j  e.  W  |->  A ) `  ( K  +  n
) ) ) )
4136, 40rspc 3156 . . . . . . . . . . . . . 14  |-  ( n  e.  Z  ->  ( A. k  e.  Z  ( ( k  e.  Z  |->  B ) `  k )  =  ( ( j  e.  W  |->  A ) `  ( K  +  k )
)  ->  ( (
k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `
 ( K  +  n ) ) ) )
4234, 41mpan9 476 . . . . . . . . . . . . 13  |-  ( (
ph  /\  n  e.  Z )  ->  (
( k  e.  Z  |->  B ) `  n
)  =  ( ( j  e.  W  |->  A ) `  ( K  +  n ) ) )
4342ralrimiva 2814 . . . . . . . . . . . 12  |-  ( ph  ->  A. n  e.  Z  ( ( k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `  ( K  +  n )
) )
4443adantr 471 . . . . . . . . . . 11  |-  ( (
ph  /\  m  e.  W )  ->  A. n  e.  Z  ( (
k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `
 ( K  +  n ) ) )
451adantr 471 . . . . . . . . . . . . 13  |-  ( (
ph  /\  m  e.  W )  ->  M  e.  ZZ )
462adantr 471 . . . . . . . . . . . . 13  |-  ( (
ph  /\  m  e.  W )  ->  K  e.  ZZ )
47 simpr 467 . . . . . . . . . . . . . 14  |-  ( (
ph  /\  m  e.  W )  ->  m  e.  W )
4847, 4syl6eleq 2550 . . . . . . . . . . . . 13  |-  ( (
ph  /\  m  e.  W )  ->  m  e.  ( ZZ>= `  ( M  +  K ) ) )
49 eluzsub 11217 . . . . . . . . . . . . 13  |-  ( ( M  e.  ZZ  /\  K  e.  ZZ  /\  m  e.  ( ZZ>= `  ( M  +  K ) ) )  ->  ( m  -  K )  e.  (
ZZ>= `  M ) )
5045, 46, 48, 49syl3anc 1276 . . . . . . . . . . . 12  |-  ( (
ph  /\  m  e.  W )  ->  (
m  -  K )  e.  ( ZZ>= `  M
) )
5150, 9syl6eleqr 2551 . . . . . . . . . . 11  |-  ( (
ph  /\  m  e.  W )  ->  (
m  -  K )  e.  Z )
52 fveq2 5888 . . . . . . . . . . . . 13  |-  ( n  =  ( m  -  K )  ->  (
( k  e.  Z  |->  B ) `  n
)  =  ( ( k  e.  Z  |->  B ) `  ( m  -  K ) ) )
53 oveq2 6323 . . . . . . . . . . . . . 14  |-  ( n  =  ( m  -  K )  ->  ( K  +  n )  =  ( K  +  ( m  -  K
) ) )
5453fveq2d 5892 . . . . . . . . . . . . 13  |-  ( n  =  ( m  -  K )  ->  (
( j  e.  W  |->  A ) `  ( K  +  n )
)  =  ( ( j  e.  W  |->  A ) `  ( K  +  ( m  -  K ) ) ) )
5552, 54eqeq12d 2477 . . . . . . . . . . . 12  |-  ( n  =  ( m  -  K )  ->  (
( ( k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `  ( K  +  n )
)  <->  ( ( k  e.  Z  |->  B ) `
 ( m  -  K ) )  =  ( ( j  e.  W  |->  A ) `  ( K  +  (
m  -  K ) ) ) ) )
5655rspccva 3161 . . . . . . . . . . 11  |-  ( ( A. n  e.  Z  ( ( k  e.  Z  |->  B ) `  n )  =  ( ( j  e.  W  |->  A ) `  ( K  +  n )
)  /\  ( m  -  K )  e.  Z
)  ->  ( (
k  e.  Z  |->  B ) `  ( m  -  K ) )  =  ( ( j  e.  W  |->  A ) `
 ( K  +  ( m  -  K
) ) ) )
5744, 51, 56syl2anc 671 . . . . . . . . . 10  |-  ( (
ph  /\  m  e.  W )  ->  (
( k  e.  Z  |->  B ) `  (
m  -  K ) )  =  ( ( j  e.  W  |->  A ) `  ( K  +  ( m  -  K ) ) ) )
58 pncan3 9909 . . . . . . . . . . . 12  |-  ( ( K  e.  CC  /\  m  e.  CC )  ->  ( K  +  ( m  -  K ) )  =  m )
596, 8, 58syl2an 484 . . . . . . . . . . 11  |-  ( (
ph  /\  m  e.  W )  ->  ( K  +  ( m  -  K ) )  =  m )
6059fveq2d 5892 . . . . . . . . . 10  |-  ( (
ph  /\  m  e.  W )  ->  (
( j  e.  W  |->  A ) `  ( K  +  ( m  -  K ) ) )  =  ( ( j  e.  W  |->  A ) `
 m ) )
6114, 57, 603eqtrrd 2501 . . . . . . . . 9  |-  ( (
ph  /\  m  e.  W )  ->  (
( j  e.  W  |->  A ) `  m
)  =  ( ( ( k  e.  Z  |->  B )  shift  K ) `
 m ) )
625, 61sylan2br 483 . . . . . . . 8  |-  ( (
ph  /\  m  e.  ( ZZ>= `  ( M  +  K ) ) )  ->  ( ( j  e.  W  |->  A ) `
 m )  =  ( ( ( k  e.  Z  |->  B ) 
shift  K ) `  m
) )
633, 62seqfeq 12270 . . . . . . 7  |-  ( ph  ->  seq ( M  +  K ) (  +  ,  ( j  e.  W  |->  A ) )  =  seq ( M  +  K ) (  +  ,  ( ( k  e.  Z  |->  B )  shift  K )
) )
6463breq1d 4426 . . . . . 6  |-  ( ph  ->  (  seq ( M  +  K ) (  +  ,  ( j  e.  W  |->  A ) )  ~~>  x  <->  seq ( M  +  K )
(  +  ,  ( ( k  e.  Z  |->  B )  shift  K ) )  ~~>  x ) )
6512isershft 13776 . . . . . . 7  |-  ( ( M  e.  ZZ  /\  K  e.  ZZ )  ->  (  seq M (  +  ,  ( k  e.  Z  |->  B ) )  ~~>  x  <->  seq ( M  +  K )
(  +  ,  ( ( k  e.  Z  |->  B )  shift  K ) )  ~~>  x ) )
661, 2, 65syl2anc 671 . . . . . 6  |-  ( ph  ->  (  seq M (  +  ,  ( k  e.  Z  |->  B ) )  ~~>  x  <->  seq ( M  +  K )
(  +  ,  ( ( k  e.  Z  |->  B )  shift  K ) )  ~~>  x ) )
6764, 66bitr4d 264 . . . . 5  |-  ( ph  ->  (  seq ( M  +  K ) (  +  ,  ( j  e.  W  |->  A ) )  ~~>  x  <->  seq M (  +  ,  ( k  e.  Z  |->  B ) )  ~~>  x ) )
6867iotabidv 5586 . . . 4  |-  ( ph  ->  ( iota x  seq ( M  +  K
) (  +  , 
( j  e.  W  |->  A ) )  ~~>  x )  =  ( iota x  seq M (  +  , 
( k  e.  Z  |->  B ) )  ~~>  x ) )
69 df-fv 5609 . . . 4  |-  (  ~~>  `  seq ( M  +  K
) (  +  , 
( j  e.  W  |->  A ) ) )  =  ( iota x  seq ( M  +  K
) (  +  , 
( j  e.  W  |->  A ) )  ~~>  x )
70 df-fv 5609 . . . 4  |-  (  ~~>  `  seq M (  +  , 
( k  e.  Z  |->  B ) ) )  =  ( iota x  seq M (  +  , 
( k  e.  Z  |->  B ) )  ~~>  x )
7168, 69, 703eqtr4g 2521 . . 3  |-  ( ph  ->  (  ~~>  `  seq ( M  +  K )
(  +  ,  ( j  e.  W  |->  A ) ) )  =  (  ~~>  `  seq M (  +  ,  ( k  e.  Z  |->  B ) ) ) )
72 eqidd 2463 . . . 4  |-  ( (
ph  /\  m  e.  W )  ->  (
( j  e.  W  |->  A ) `  m
)  =  ( ( j  e.  W  |->  A ) `  m ) )
73 isumshft.6 . . . . . 6  |-  ( (
ph  /\  j  e.  W )  ->  A  e.  CC )
7473, 30fmptd 6069 . . . . 5  |-  ( ph  ->  ( j  e.  W  |->  A ) : W --> CC )
75 ffvelrn 6043 . . . . 5  |-  ( ( ( j  e.  W  |->  A ) : W --> CC  /\  m  e.  W
)  ->  ( (
j  e.  W  |->  A ) `  m )  e.  CC )
7674, 75sylan 478 . . . 4  |-  ( (
ph  /\  m  e.  W )  ->  (
( j  e.  W  |->  A ) `  m
)  e.  CC )
774, 3, 72, 76isum 13834 . . 3  |-  ( ph  -> 
sum_ m  e.  W  ( ( j  e.  W  |->  A ) `  m )  =  (  ~~>  `
 seq ( M  +  K ) (  +  ,  ( j  e.  W  |->  A ) ) ) )
78 eqidd 2463 . . . 4  |-  ( (
ph  /\  n  e.  Z )  ->  (
( k  e.  Z  |->  B ) `  n
)  =  ( ( k  e.  Z  |->  B ) `  n ) )
7974adantr 471 . . . . . 6  |-  ( (
ph  /\  n  e.  Z )  ->  (
j  e.  W  |->  A ) : W --> CC )
8028ralrimiva 2814 . . . . . . 7  |-  ( ph  ->  A. k  e.  Z  ( K  +  k
)  e.  W )
8138eleq1d 2524 . . . . . . . 8  |-  ( k  =  n  ->  (
( K  +  k )  e.  W  <->  ( K  +  n )  e.  W
) )
8281rspccva 3161 . . . . . . 7  |-  ( ( A. k  e.  Z  ( K  +  k
)  e.  W  /\  n  e.  Z )  ->  ( K  +  n
)  e.  W )
8380, 82sylan 478 . . . . . 6  |-  ( (
ph  /\  n  e.  Z )  ->  ( K  +  n )  e.  W )
84 ffvelrn 6043 . . . . . 6  |-  ( ( ( j  e.  W  |->  A ) : W --> CC  /\  ( K  +  n )  e.  W
)  ->  ( (
j  e.  W  |->  A ) `  ( K  +  n ) )  e.  CC )
8579, 83, 84syl2anc 671 . . . . 5  |-  ( (
ph  /\  n  e.  Z )  ->  (
( j  e.  W  |->  A ) `  ( K  +  n )
)  e.  CC )
8642, 85eqeltrd 2540 . . . 4  |-  ( (
ph  /\  n  e.  Z )  ->  (
( k  e.  Z  |->  B ) `  n
)  e.  CC )
879, 1, 78, 86isum 13834 . . 3  |-  ( ph  -> 
sum_ n  e.  Z  ( ( k  e.  Z  |->  B ) `  n )  =  (  ~~>  `
 seq M (  +  ,  ( k  e.  Z  |->  B ) ) ) )
8871, 77, 873eqtr4d 2506 . 2  |-  ( ph  -> 
sum_ m  e.  W  ( ( j  e.  W  |->  A ) `  m )  =  sum_ n  e.  Z  ( ( k  e.  Z  |->  B ) `  n ) )
89 sumfc 13824 . 2  |-  sum_ m  e.  W  ( (
j  e.  W  |->  A ) `  m )  =  sum_ j  e.  W  A
90 sumfc 13824 . 2  |-  sum_ n  e.  Z  ( (
k  e.  Z  |->  B ) `  n )  =  sum_ k  e.  Z  B
9188, 89, 903eqtr3g 2519 1  |-  ( ph  -> 
sum_ j  e.  W  A  =  sum_ k  e.  Z  B )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    <-> wb 189    /\ wa 375    = wceq 1455    e. wcel 1898   A.wral 2749   _Vcvv 3057   class class class wbr 4416    |-> cmpt 4475    _I cid 4763   iotacio 5563   -->wf 5597   ` cfv 5601  (class class class)co 6315   CCcc 9563    + caddc 9568    - cmin 9886   ZZcz 10966   ZZ>=cuz 11188    seqcseq 12245    shift cshi 13178    ~~> cli 13597   sum_csu 13801
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1680  ax-4 1693  ax-5 1769  ax-6 1816  ax-7 1862  ax-8 1900  ax-9 1907  ax-10 1926  ax-11 1931  ax-12 1944  ax-13 2102  ax-ext 2442  ax-rep 4529  ax-sep 4539  ax-nul 4548  ax-pow 4595  ax-pr 4653  ax-un 6610  ax-inf2 8172  ax-cnex 9621  ax-resscn 9622  ax-1cn 9623  ax-icn 9624  ax-addcl 9625  ax-addrcl 9626  ax-mulcl 9627  ax-mulrcl 9628  ax-mulcom 9629  ax-addass 9630  ax-mulass 9631  ax-distr 9632  ax-i2m1 9633  ax-1ne0 9634  ax-1rid 9635  ax-rnegex 9636  ax-rrecex 9637  ax-cnre 9638  ax-pre-lttri 9639  ax-pre-lttrn 9640  ax-pre-ltadd 9641  ax-pre-mulgt0 9642
This theorem depends on definitions:  df-bi 190  df-or 376  df-an 377  df-3or 992  df-3an 993  df-tru 1458  df-fal 1461  df-ex 1675  df-nf 1679  df-sb 1809  df-eu 2314  df-mo 2315  df-clab 2449  df-cleq 2455  df-clel 2458  df-nfc 2592  df-ne 2635  df-nel 2636  df-ral 2754  df-rex 2755  df-reu 2756  df-rmo 2757  df-rab 2758  df-v 3059  df-sbc 3280  df-csb 3376  df-dif 3419  df-un 3421  df-in 3423  df-ss 3430  df-pss 3432  df-nul 3744  df-if 3894  df-pw 3965  df-sn 3981  df-pr 3983  df-tp 3985  df-op 3987  df-uni 4213  df-int 4249  df-iun 4294  df-br 4417  df-opab 4476  df-mpt 4477  df-tr 4512  df-eprel 4764  df-id 4768  df-po 4774  df-so 4775  df-fr 4812  df-se 4813  df-we 4814  df-xp 4859  df-rel 4860  df-cnv 4861  df-co 4862  df-dm 4863  df-rn 4864  df-res 4865  df-ima 4866  df-pred 5399  df-ord 5445  df-on 5446  df-lim 5447  df-suc 5448  df-iota 5565  df-fun 5603  df-fn 5604  df-f 5605  df-f1 5606  df-fo 5607  df-f1o 5608  df-fv 5609  df-isom 5610  df-riota 6277  df-ov 6318  df-oprab 6319  df-mpt2 6320  df-om 6720  df-1st 6820  df-2nd 6821  df-wrecs 7054  df-recs 7116  df-rdg 7154  df-1o 7208  df-oadd 7212  df-er 7389  df-en 7596  df-dom 7597  df-sdom 7598  df-fin 7599  df-oi 8051  df-card 8399  df-pnf 9703  df-mnf 9704  df-xr 9705  df-ltxr 9706  df-le 9707  df-sub 9888  df-neg 9889  df-div 10298  df-nn 10638  df-2 10696  df-n0 10899  df-z 10967  df-uz 11189  df-rp 11332  df-fz 11814  df-fzo 11947  df-seq 12246  df-exp 12305  df-hash 12548  df-shft 13179  df-cj 13211  df-re 13212  df-im 13213  df-sqrt 13347  df-abs 13348  df-clim 13601  df-sum 13802
This theorem is referenced by:  eftlub  14212  pserdv2  23434  logtayl  23654  binomcxplemnotnn0  36749
  Copyright terms: Public domain W3C validator