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

Theorem fsumf1o 13732
Description: Re-index a finite sum using a bijection. (Contributed by Mario Carneiro, 20-Apr-2014.)
Hypotheses
Ref Expression
fsumf1o.1  |-  ( k  =  G  ->  B  =  D )
fsumf1o.2  |-  ( ph  ->  C  e.  Fin )
fsumf1o.3  |-  ( ph  ->  F : C -1-1-onto-> A )
fsumf1o.4  |-  ( (
ph  /\  n  e.  C )  ->  ( F `  n )  =  G )
fsumf1o.5  |-  ( (
ph  /\  k  e.  A )  ->  B  e.  CC )
Assertion
Ref Expression
fsumf1o  |-  ( ph  -> 
sum_ k  e.  A  B  =  sum_ n  e.  C  D )
Distinct variable groups:    k, n, A    B, n    C, n    D, k    n, F    k, G    ph, k, n
Allowed substitution hints:    B( k)    C( k)    D( n)    F( k)    G( n)

Proof of Theorem fsumf1o
Dummy variables  f  m are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 sum0 13730 . . . 4  |-  sum_ k  e.  (/)  B  =  0
2 fsumf1o.3 . . . . . . . 8  |-  ( ph  ->  F : C -1-1-onto-> A )
3 f1oeq2 5766 . . . . . . . 8  |-  ( C  =  (/)  ->  ( F : C -1-1-onto-> A  <->  F : (/) -1-1-onto-> A ) )
42, 3syl5ibcom 223 . . . . . . 7  |-  ( ph  ->  ( C  =  (/)  ->  F : (/) -1-1-onto-> A ) )
54imp 430 . . . . . 6  |-  ( (
ph  /\  C  =  (/) )  ->  F : (/) -1-1-onto-> A )
6 f1ofo 5781 . . . . . 6  |-  ( F : (/)
-1-1-onto-> A  ->  F : (/) -onto-> A )
7 fo00 5808 . . . . . . 7  |-  ( F : (/) -onto-> A  <->  ( F  =  (/)  /\  A  =  (/) ) )
87simprbi 465 . . . . . 6  |-  ( F : (/) -onto-> A  ->  A  =  (/) )
95, 6, 83syl 18 . . . . 5  |-  ( (
ph  /\  C  =  (/) )  ->  A  =  (/) )
109sumeq1d 13710 . . . 4  |-  ( (
ph  /\  C  =  (/) )  ->  sum_ k  e.  A  B  =  sum_ k  e.  (/)  B )
11 simpr 462 . . . . . 6  |-  ( (
ph  /\  C  =  (/) )  ->  C  =  (/) )
1211sumeq1d 13710 . . . . 5  |-  ( (
ph  /\  C  =  (/) )  ->  sum_ n  e.  C  D  =  sum_ n  e.  (/)  D )
13 sum0 13730 . . . . 5  |-  sum_ n  e.  (/)  D  =  0
1412, 13syl6eq 2478 . . . 4  |-  ( (
ph  /\  C  =  (/) )  ->  sum_ n  e.  C  D  =  0 )
151, 10, 143eqtr4a 2488 . . 3  |-  ( (
ph  /\  C  =  (/) )  ->  sum_ k  e.  A  B  =  sum_ n  e.  C  D )
1615ex 435 . 2  |-  ( ph  ->  ( C  =  (/)  -> 
sum_ k  e.  A  B  =  sum_ n  e.  C  D ) )
17 fveq2 5825 . . . . . . . . 9  |-  ( m  =  ( f `  n )  ->  ( F `  m )  =  ( F `  ( f `  n
) ) )
1817fveq2d 5829 . . . . . . . 8  |-  ( m  =  ( f `  n )  ->  (
( k  e.  A  |->  B ) `  ( F `  m )
)  =  ( ( k  e.  A  |->  B ) `  ( F `
 ( f `  n ) ) ) )
19 simprl 762 . . . . . . . 8  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  ( # `
 C )  e.  NN )
20 simprr 764 . . . . . . . 8  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C )
21 f1of 5774 . . . . . . . . . . . 12  |-  ( F : C -1-1-onto-> A  ->  F : C
--> A )
222, 21syl 17 . . . . . . . . . . 11  |-  ( ph  ->  F : C --> A )
2322ffvelrnda 5981 . . . . . . . . . 10  |-  ( (
ph  /\  m  e.  C )  ->  ( F `  m )  e.  A )
24 fsumf1o.5 . . . . . . . . . . . 12  |-  ( (
ph  /\  k  e.  A )  ->  B  e.  CC )
25 eqid 2428 . . . . . . . . . . . 12  |-  ( k  e.  A  |->  B )  =  ( k  e.  A  |->  B )
2624, 25fmptd 6005 . . . . . . . . . . 11  |-  ( ph  ->  ( k  e.  A  |->  B ) : A --> CC )
2726ffvelrnda 5981 . . . . . . . . . 10  |-  ( (
ph  /\  ( F `  m )  e.  A
)  ->  ( (
k  e.  A  |->  B ) `  ( F `
 m ) )  e.  CC )
2823, 27syldan 472 . . . . . . . . 9  |-  ( (
ph  /\  m  e.  C )  ->  (
( k  e.  A  |->  B ) `  ( F `  m )
)  e.  CC )
2928adantlr 719 . . . . . . . 8  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  m  e.  C )  ->  ( ( k  e.  A  |->  B ) `  ( F `  m ) )  e.  CC )
302adantr 466 . . . . . . . . . . . 12  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  F : C -1-1-onto-> A )
31 f1oco 5796 . . . . . . . . . . . 12  |-  ( ( F : C -1-1-onto-> A  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C )  ->  ( F  o.  f ) : ( 1 ... ( # `  C
) ) -1-1-onto-> A )
3230, 20, 31syl2anc 665 . . . . . . . . . . 11  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  ( F  o.  f ) : ( 1 ... ( # `  C
) ) -1-1-onto-> A )
33 f1of 5774 . . . . . . . . . . 11  |-  ( ( F  o.  f ) : ( 1 ... ( # `  C
) ) -1-1-onto-> A  ->  ( F  o.  f ) : ( 1 ... ( # `  C ) ) --> A )
3432, 33syl 17 . . . . . . . . . 10  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  ( F  o.  f ) : ( 1 ... ( # `  C
) ) --> A )
35 fvco3 5902 . . . . . . . . . 10  |-  ( ( ( F  o.  f
) : ( 1 ... ( # `  C
) ) --> A  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( ( k  e.  A  |->  B )  o.  ( F  o.  f ) ) `  n )  =  ( ( k  e.  A  |->  B ) `  (
( F  o.  f
) `  n )
) )
3634, 35sylan 473 . . . . . . . . 9  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( ( k  e.  A  |->  B )  o.  ( F  o.  f ) ) `  n )  =  ( ( k  e.  A  |->  B ) `  (
( F  o.  f
) `  n )
) )
37 f1of 5774 . . . . . . . . . . . 12  |-  ( f : ( 1 ... ( # `  C
) ) -1-1-onto-> C  ->  f :
( 1 ... ( # `
 C ) ) --> C )
3837ad2antll 733 . . . . . . . . . . 11  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  f : ( 1 ... ( # `  C
) ) --> C )
39 fvco3 5902 . . . . . . . . . . 11  |-  ( ( f : ( 1 ... ( # `  C
) ) --> C  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( F  o.  f ) `  n
)  =  ( F `
 ( f `  n ) ) )
4038, 39sylan 473 . . . . . . . . . 10  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( F  o.  f ) `  n
)  =  ( F `
 ( f `  n ) ) )
4140fveq2d 5829 . . . . . . . . 9  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( k  e.  A  |->  B ) `  ( ( F  o.  f ) `  n
) )  =  ( ( k  e.  A  |->  B ) `  ( F `  ( f `  n ) ) ) )
4236, 41eqtrd 2462 . . . . . . . 8  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  n  e.  ( 1 ... ( # `  C
) ) )  -> 
( ( ( k  e.  A  |->  B )  o.  ( F  o.  f ) ) `  n )  =  ( ( k  e.  A  |->  B ) `  ( F `  ( f `  n ) ) ) )
4318, 19, 20, 29, 42fsum 13729 . . . . . . 7  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  sum_ m  e.  C  ( (
k  e.  A  |->  B ) `  ( F `
 m ) )  =  (  seq 1
(  +  ,  ( ( k  e.  A  |->  B )  o.  ( F  o.  f )
) ) `  ( # `
 C ) ) )
44 fsumf1o.4 . . . . . . . . . . . . . 14  |-  ( (
ph  /\  n  e.  C )  ->  ( F `  n )  =  G )
4522ffvelrnda 5981 . . . . . . . . . . . . . 14  |-  ( (
ph  /\  n  e.  C )  ->  ( F `  n )  e.  A )
4644, 45eqeltrrd 2507 . . . . . . . . . . . . 13  |-  ( (
ph  /\  n  e.  C )  ->  G  e.  A )
47 fsumf1o.1 . . . . . . . . . . . . . 14  |-  ( k  =  G  ->  B  =  D )
4847, 25fvmpti 5907 . . . . . . . . . . . . 13  |-  ( G  e.  A  ->  (
( k  e.  A  |->  B ) `  G
)  =  (  _I 
`  D ) )
4946, 48syl 17 . . . . . . . . . . . 12  |-  ( (
ph  /\  n  e.  C )  ->  (
( k  e.  A  |->  B ) `  G
)  =  (  _I 
`  D ) )
5044fveq2d 5829 . . . . . . . . . . . 12  |-  ( (
ph  /\  n  e.  C )  ->  (
( k  e.  A  |->  B ) `  ( F `  n )
)  =  ( ( k  e.  A  |->  B ) `  G ) )
51 eqid 2428 . . . . . . . . . . . . . 14  |-  ( n  e.  C  |->  D )  =  ( n  e.  C  |->  D )
5251fvmpt2i 5916 . . . . . . . . . . . . 13  |-  ( n  e.  C  ->  (
( n  e.  C  |->  D ) `  n
)  =  (  _I 
`  D ) )
5352adantl 467 . . . . . . . . . . . 12  |-  ( (
ph  /\  n  e.  C )  ->  (
( n  e.  C  |->  D ) `  n
)  =  (  _I 
`  D ) )
5449, 50, 533eqtr4rd 2473 . . . . . . . . . . 11  |-  ( (
ph  /\  n  e.  C )  ->  (
( n  e.  C  |->  D ) `  n
)  =  ( ( k  e.  A  |->  B ) `  ( F `
 n ) ) )
5554ralrimiva 2779 . . . . . . . . . 10  |-  ( ph  ->  A. n  e.  C  ( ( n  e.  C  |->  D ) `  n )  =  ( ( k  e.  A  |->  B ) `  ( F `  n )
) )
56 nffvmpt1 5833 . . . . . . . . . . . 12  |-  F/_ n
( ( n  e.  C  |->  D ) `  m )
5756nfeq1 2582 . . . . . . . . . . 11  |-  F/ n
( ( n  e.  C  |->  D ) `  m )  =  ( ( k  e.  A  |->  B ) `  ( F `  m )
)
58 fveq2 5825 . . . . . . . . . . . 12  |-  ( n  =  m  ->  (
( n  e.  C  |->  D ) `  n
)  =  ( ( n  e.  C  |->  D ) `  m ) )
59 fveq2 5825 . . . . . . . . . . . . 13  |-  ( n  =  m  ->  ( F `  n )  =  ( F `  m ) )
6059fveq2d 5829 . . . . . . . . . . . 12  |-  ( n  =  m  ->  (
( k  e.  A  |->  B ) `  ( F `  n )
)  =  ( ( k  e.  A  |->  B ) `  ( F `
 m ) ) )
6158, 60eqeq12d 2443 . . . . . . . . . . 11  |-  ( n  =  m  ->  (
( ( n  e.  C  |->  D ) `  n )  =  ( ( k  e.  A  |->  B ) `  ( F `  n )
)  <->  ( ( n  e.  C  |->  D ) `
 m )  =  ( ( k  e.  A  |->  B ) `  ( F `  m ) ) ) )
6257, 61rspc 3119 . . . . . . . . . 10  |-  ( m  e.  C  ->  ( A. n  e.  C  ( ( n  e.  C  |->  D ) `  n )  =  ( ( k  e.  A  |->  B ) `  ( F `  n )
)  ->  ( (
n  e.  C  |->  D ) `  m )  =  ( ( k  e.  A  |->  B ) `
 ( F `  m ) ) ) )
6355, 62mpan9 471 . . . . . . . . 9  |-  ( (
ph  /\  m  e.  C )  ->  (
( n  e.  C  |->  D ) `  m
)  =  ( ( k  e.  A  |->  B ) `  ( F `
 m ) ) )
6463adantlr 719 . . . . . . . 8  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  m  e.  C )  ->  ( ( n  e.  C  |->  D ) `  m )  =  ( ( k  e.  A  |->  B ) `  ( F `  m )
) )
6564sumeq2dv 13712 . . . . . . 7  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  sum_ m  e.  C  ( (
n  e.  C  |->  D ) `  m )  =  sum_ m  e.  C  ( ( k  e.  A  |->  B ) `  ( F `  m ) ) )
66 fveq2 5825 . . . . . . . 8  |-  ( m  =  ( ( F  o.  f ) `  n )  ->  (
( k  e.  A  |->  B ) `  m
)  =  ( ( k  e.  A  |->  B ) `  ( ( F  o.  f ) `
 n ) ) )
6726adantr 466 . . . . . . . . 9  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  (
k  e.  A  |->  B ) : A --> CC )
6867ffvelrnda 5981 . . . . . . . 8  |-  ( ( ( ph  /\  (
( # `  C )  e.  NN  /\  f : ( 1 ... ( # `  C
) ) -1-1-onto-> C ) )  /\  m  e.  A )  ->  ( ( k  e.  A  |->  B ) `  m )  e.  CC )
6966, 19, 32, 68, 36fsum 13729 . . . . . . 7  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  sum_ m  e.  A  ( (
k  e.  A  |->  B ) `  m )  =  (  seq 1
(  +  ,  ( ( k  e.  A  |->  B )  o.  ( F  o.  f )
) ) `  ( # `
 C ) ) )
7043, 65, 693eqtr4rd 2473 . . . . . 6  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  sum_ m  e.  A  ( (
k  e.  A  |->  B ) `  m )  =  sum_ m  e.  C  ( ( n  e.  C  |->  D ) `  m ) )
71 sumfc 13718 . . . . . 6  |-  sum_ m  e.  A  ( (
k  e.  A  |->  B ) `  m )  =  sum_ k  e.  A  B
72 sumfc 13718 . . . . . 6  |-  sum_ m  e.  C  ( (
n  e.  C  |->  D ) `  m )  =  sum_ n  e.  C  D
7370, 71, 723eqtr3g 2485 . . . . 5  |-  ( (
ph  /\  ( ( # `
 C )  e.  NN  /\  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C ) )  ->  sum_ k  e.  A  B  =  sum_ n  e.  C  D
)
7473expr 618 . . . 4  |-  ( (
ph  /\  ( # `  C
)  e.  NN )  ->  ( f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C  ->  sum_ k  e.  A  B  =  sum_ n  e.  C  D ) )
7574exlimdv 1772 . . 3  |-  ( (
ph  /\  ( # `  C
)  e.  NN )  ->  ( E. f 
f : ( 1 ... ( # `  C
) ) -1-1-onto-> C  ->  sum_ k  e.  A  B  =  sum_ n  e.  C  D ) )
7675expimpd 606 . 2  |-  ( ph  ->  ( ( ( # `  C )  e.  NN  /\ 
E. f  f : ( 1 ... ( # `
 C ) ) -1-1-onto-> C )  ->  sum_ k  e.  A  B  =  sum_ n  e.  C  D ) )
77 fsumf1o.2 . . 3  |-  ( ph  ->  C  e.  Fin )
78 fz1f1o 13719 . . 3  |-  ( C  e.  Fin  ->  ( C  =  (/)  \/  (
( # `  C )  e.  NN  /\  E. f  f : ( 1 ... ( # `  C ) ) -1-1-onto-> C ) ) )
7977, 78syl 17 . 2  |-  ( ph  ->  ( C  =  (/)  \/  ( ( # `  C
)  e.  NN  /\  E. f  f : ( 1 ... ( # `  C ) ) -1-1-onto-> C ) ) )
8016, 76, 79mpjaod 382 1  |-  ( ph  -> 
sum_ k  e.  A  B  =  sum_ n  e.  C  D )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    \/ wo 369    /\ wa 370    = wceq 1437   E.wex 1657    e. wcel 1872   A.wral 2714   (/)c0 3704    |-> cmpt 4425    _I cid 4706    o. ccom 4800   -->wf 5540   -onto->wfo 5542   -1-1-onto->wf1o 5543   ` cfv 5544  (class class class)co 6249   Fincfn 7524   CCcc 9488   0cc0 9490   1c1 9491    + caddc 9493   NNcn 10560   ...cfz 11735    seqcseq 12163   #chash 12465   sum_csu 13695
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1663  ax-4 1676  ax-5 1752  ax-6 1798  ax-7 1843  ax-8 1874  ax-9 1876  ax-10 1891  ax-11 1896  ax-12 1909  ax-13 2063  ax-ext 2408  ax-rep 4479  ax-sep 4489  ax-nul 4498  ax-pow 4545  ax-pr 4603  ax-un 6541  ax-inf2 8099  ax-cnex 9546  ax-resscn 9547  ax-1cn 9548  ax-icn 9549  ax-addcl 9550  ax-addrcl 9551  ax-mulcl 9552  ax-mulrcl 9553  ax-mulcom 9554  ax-addass 9555  ax-mulass 9556  ax-distr 9557  ax-i2m1 9558  ax-1ne0 9559  ax-1rid 9560  ax-rnegex 9561  ax-rrecex 9562  ax-cnre 9563  ax-pre-lttri 9564  ax-pre-lttrn 9565  ax-pre-ltadd 9566  ax-pre-mulgt0 9567  ax-pre-sup 9568
This theorem depends on definitions:  df-bi 188  df-or 371  df-an 372  df-3or 983  df-3an 984  df-tru 1440  df-fal 1443  df-ex 1658  df-nf 1662  df-sb 1791  df-eu 2280  df-mo 2281  df-clab 2415  df-cleq 2421  df-clel 2424  df-nfc 2558  df-ne 2601  df-nel 2602  df-ral 2719  df-rex 2720  df-reu 2721  df-rmo 2722  df-rab 2723  df-v 3024  df-sbc 3243  df-csb 3339  df-dif 3382  df-un 3384  df-in 3386  df-ss 3393  df-pss 3395  df-nul 3705  df-if 3855  df-pw 3926  df-sn 3942  df-pr 3944  df-tp 3946  df-op 3948  df-uni 4163  df-int 4199  df-iun 4244  df-br 4367  df-opab 4426  df-mpt 4427  df-tr 4462  df-eprel 4707  df-id 4711  df-po 4717  df-so 4718  df-fr 4755  df-se 4756  df-we 4757  df-xp 4802  df-rel 4803  df-cnv 4804  df-co 4805  df-dm 4806  df-rn 4807  df-res 4808  df-ima 4809  df-pred 5342  df-ord 5388  df-on 5389  df-lim 5390  df-suc 5391  df-iota 5508  df-fun 5546  df-fn 5547  df-f 5548  df-f1 5549  df-fo 5550  df-f1o 5551  df-fv 5552  df-isom 5553  df-riota 6211  df-ov 6252  df-oprab 6253  df-mpt2 6254  df-om 6651  df-1st 6751  df-2nd 6752  df-wrecs 6983  df-recs 7045  df-rdg 7083  df-1o 7137  df-oadd 7141  df-er 7318  df-en 7525  df-dom 7526  df-sdom 7527  df-fin 7528  df-sup 7909  df-oi 7978  df-card 8325  df-pnf 9628  df-mnf 9629  df-xr 9630  df-ltxr 9631  df-le 9632  df-sub 9813  df-neg 9814  df-div 10221  df-nn 10561  df-2 10619  df-3 10620  df-n0 10821  df-z 10889  df-uz 11111  df-rp 11254  df-fz 11736  df-fzo 11867  df-seq 12164  df-exp 12223  df-hash 12466  df-cj 13106  df-re 13107  df-im 13108  df-sqrt 13242  df-abs 13243  df-clim 13495  df-sum 13696
This theorem is referenced by:  fsumss  13734  fsum2dlem  13774  fsumcnv  13777  fsumrev  13783  fsumshft  13784  ackbijnn  13829  incexclem  13837  ovoliunlem1  22397  ovolicc2lem4OLD  22415  ovolicc2lem4  22416  itg1addlem4  22599  itg1mulc  22604  basellem3  23951  basellem5  23953  fsumdvdscom  24056  dvdsflsumcom  24059  musum  24062  fsumdvdsmul  24066  sgmppw  24067  fsumvma  24083  dchrsum2  24138  sumdchr2  24140  dchrisumlem1  24269  dchrisum0flblem1  24288  dchrisum0fno1  24291  eulerpartlemgs2  29165  phisum  35989  fsumf1of  37537  sumnnodd  37593  dvnprodlem2  37705
  Copyright terms: Public domain W3C validator