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

Theorem xrge0gsumle 21929
Description: A finite sum in the nonnegative extended reals is monotonic in the support. (Contributed by Mario Carneiro, 13-Sep-2015.)
Hypotheses
Ref Expression
xrge0gsumle.g  |-  G  =  ( RR*ss  ( 0 [,] +oo ) )
xrge0gsumle.a  |-  ( ph  ->  A  e.  V )
xrge0gsumle.f  |-  ( ph  ->  F : A --> ( 0 [,] +oo ) )
xrge0gsumle.b  |-  ( ph  ->  B  e.  ( ~P A  i^i  Fin )
)
xrge0gsumle.c  |-  ( ph  ->  C  C_  B )
Assertion
Ref Expression
xrge0gsumle  |-  ( ph  ->  ( G  gsumg  ( F  |`  C ) )  <_  ( G  gsumg  ( F  |`  B )
) )

Proof of Theorem xrge0gsumle
Dummy variable  s is distinct from all other variables.
StepHypRef Expression
1 iccssxr 11742 . . . . . . 7  |-  ( 0 [,] +oo )  C_  RR*
2 xrge0gsumle.g . . . . . . . . . 10  |-  G  =  ( RR*ss  ( 0 [,] +oo ) )
3 xrsbas 19061 . . . . . . . . . 10  |-  RR*  =  ( Base `  RR*s )
42, 3ressbas2 15258 . . . . . . . . 9  |-  ( ( 0 [,] +oo )  C_ 
RR*  ->  ( 0 [,] +oo )  =  ( Base `  G ) )
51, 4ax-mp 5 . . . . . . . 8  |-  ( 0 [,] +oo )  =  ( Base `  G
)
6 eqid 2471 . . . . . . . . . 10  |-  ( RR*ss  ( RR*  \  { -oo } ) )  =  (
RR*ss  ( RR*  \  { -oo } ) )
76xrge0subm 19086 . . . . . . . . 9  |-  ( 0 [,] +oo )  e.  (SubMnd `  ( RR*ss  ( RR*  \  { -oo } ) ) )
8 xrex 11322 . . . . . . . . . . . . 13  |-  RR*  e.  _V
9 difexg 4545 . . . . . . . . . . . . 13  |-  ( RR*  e.  _V  ->  ( RR*  \  { -oo } )  e.  _V )
108, 9ax-mp 5 . . . . . . . . . . . 12  |-  ( RR*  \  { -oo } )  e.  _V
11 simpl 464 . . . . . . . . . . . . . . 15  |-  ( ( x  e.  RR*  /\  0  <_  x )  ->  x  e.  RR* )
12 ge0nemnf 11491 . . . . . . . . . . . . . . 15  |-  ( ( x  e.  RR*  /\  0  <_  x )  ->  x  =/= -oo )
1311, 12jca 541 . . . . . . . . . . . . . 14  |-  ( ( x  e.  RR*  /\  0  <_  x )  ->  (
x  e.  RR*  /\  x  =/= -oo ) )
14 elxrge0 11767 . . . . . . . . . . . . . 14  |-  ( x  e.  ( 0 [,] +oo )  <->  ( x  e. 
RR*  /\  0  <_  x ) )
15 eldifsn 4088 . . . . . . . . . . . . . 14  |-  ( x  e.  ( RR*  \  { -oo } )  <->  ( x  e.  RR*  /\  x  =/= -oo ) )
1613, 14, 153imtr4i 274 . . . . . . . . . . . . 13  |-  ( x  e.  ( 0 [,] +oo )  ->  x  e.  ( RR*  \  { -oo } ) )
1716ssriv 3422 . . . . . . . . . . . 12  |-  ( 0 [,] +oo )  C_  ( RR*  \  { -oo } )
18 ressabs 15266 . . . . . . . . . . . 12  |-  ( ( ( RR*  \  { -oo } )  e.  _V  /\  ( 0 [,] +oo )  C_  ( RR*  \  { -oo } ) )  -> 
( ( RR*ss  ( RR*  \  { -oo }
) )s  ( 0 [,] +oo ) )  =  (
RR*ss  ( 0 [,] +oo ) ) )
1910, 17, 18mp2an 686 . . . . . . . . . . 11  |-  ( (
RR*ss  ( RR*  \  { -oo } ) )s  ( 0 [,] +oo ) )  =  ( RR*ss  (
0 [,] +oo )
)
202, 19eqtr4i 2496 . . . . . . . . . 10  |-  G  =  ( ( RR*ss  ( RR*  \  { -oo }
) )s  ( 0 [,] +oo ) )
216xrs10 19084 . . . . . . . . . 10  |-  0  =  ( 0g `  ( RR*ss  ( RR*  \  { -oo } ) ) )
2220, 21subm0 16681 . . . . . . . . 9  |-  ( ( 0 [,] +oo )  e.  (SubMnd `  ( RR*ss  ( RR*  \  { -oo } ) ) )  -> 
0  =  ( 0g
`  G ) )
237, 22ax-mp 5 . . . . . . . 8  |-  0  =  ( 0g `  G )
24 xrge0cmn 19087 . . . . . . . . . 10  |-  ( RR*ss  ( 0 [,] +oo ) )  e. CMnd
252, 24eqeltri 2545 . . . . . . . . 9  |-  G  e. CMnd
2625a1i 11 . . . . . . . 8  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  G  e. CMnd )
27 elfpw 7894 . . . . . . . . . 10  |-  ( s  e.  ( ~P A  i^i  Fin )  <->  ( s  C_  A  /\  s  e. 
Fin ) )
2827simprbi 471 . . . . . . . . 9  |-  ( s  e.  ( ~P A  i^i  Fin )  ->  s  e.  Fin )
2928adantl 473 . . . . . . . 8  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  s  e.  Fin )
30 xrge0gsumle.f . . . . . . . . 9  |-  ( ph  ->  F : A --> ( 0 [,] +oo ) )
3127simplbi 467 . . . . . . . . 9  |-  ( s  e.  ( ~P A  i^i  Fin )  ->  s  C_  A )
32 fssres 5761 . . . . . . . . 9  |-  ( ( F : A --> ( 0 [,] +oo )  /\  s  C_  A )  -> 
( F  |`  s
) : s --> ( 0 [,] +oo )
)
3330, 31, 32syl2an 485 . . . . . . . 8  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  ( F  |`  s ) : s --> ( 0 [,] +oo ) )
34 c0ex 9655 . . . . . . . . . 10  |-  0  e.  _V
3534a1i 11 . . . . . . . . 9  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  0  e.  _V )
3633, 29, 35fdmfifsupp 7911 . . . . . . . 8  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  ( F  |`  s ) finSupp  0
)
375, 23, 26, 29, 33, 36gsumcl 17627 . . . . . . 7  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  ( G  gsumg  ( F  |`  s
) )  e.  ( 0 [,] +oo )
)
381, 37sseldi 3416 . . . . . 6  |-  ( (
ph  /\  s  e.  ( ~P A  i^i  Fin ) )  ->  ( G  gsumg  ( F  |`  s
) )  e.  RR* )
39 eqid 2471 . . . . . 6  |-  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G 
gsumg  ( F  |`  s ) ) )  =  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s
) ) )
4038, 39fmptd 6061 . . . . 5  |-  ( ph  ->  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s ) ) ) : ( ~P A  i^i  Fin ) --> RR* )
41 frn 5747 . . . . 5  |-  ( ( s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s
) ) ) : ( ~P A  i^i  Fin ) --> RR*  ->  ran  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G 
gsumg  ( F  |`  s ) ) )  C_  RR* )
4240, 41syl 17 . . . 4  |-  ( ph  ->  ran  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s ) ) ) 
C_  RR* )
43 0ss 3766 . . . . . . 7  |-  (/)  C_  A
44 0fin 7817 . . . . . . 7  |-  (/)  e.  Fin
45 elfpw 7894 . . . . . . 7  |-  ( (/)  e.  ( ~P A  i^i  Fin )  <->  ( (/)  C_  A  /\  (/)  e.  Fin )
)
4643, 44, 45mpbir2an 934 . . . . . 6  |-  (/)  e.  ( ~P A  i^i  Fin )
47 0cn 9653 . . . . . 6  |-  0  e.  CC
48 reseq2 5106 . . . . . . . . . 10  |-  ( s  =  (/)  ->  ( F  |`  s )  =  ( F  |`  (/) ) )
49 res0 5115 . . . . . . . . . 10  |-  ( F  |`  (/) )  =  (/)
5048, 49syl6eq 2521 . . . . . . . . 9  |-  ( s  =  (/)  ->  ( F  |`  s )  =  (/) )
5150oveq2d 6324 . . . . . . . 8  |-  ( s  =  (/)  ->  ( G 
gsumg  ( F  |`  s ) )  =  ( G 
gsumg  (/) ) )
5223gsum0 16599 . . . . . . . 8  |-  ( G 
gsumg  (/) )  =  0
5351, 52syl6eq 2521 . . . . . . 7  |-  ( s  =  (/)  ->  ( G 
gsumg  ( F  |`  s ) )  =  0 )
5439, 53elrnmpt1s 5088 . . . . . 6  |-  ( (
(/)  e.  ( ~P A  i^i  Fin )  /\  0  e.  CC )  ->  0  e.  ran  (
s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s
) ) ) )
5546, 47, 54mp2an 686 . . . . 5  |-  0  e.  ran  ( s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s ) ) )
5655a1i 11 . . . 4  |-  ( ph  ->  0  e.  ran  (
s  e.  ( ~P A  i^i  Fin )  |->  ( G  gsumg  ( F  |`  s
) ) ) )
5742, 56sseldd 3419 . . 3  |-  ( ph  ->  0  e.  RR* )
5825a1i 11 . . . . 5  |-  ( ph  ->  G  e. CMnd )
59 xrge0gsumle.b . . . . . . 7  |-  ( ph  ->  B  e.  ( ~P A  i^i  Fin )
)
60 elfpw 7894 . . . . . . . 8  |-  ( B  e.  ( ~P A  i^i  Fin )  <->  ( B  C_  A  /\  B  e. 
Fin ) )
6160simprbi 471 . . . . . . 7  |-  ( B  e.  ( ~P A  i^i  Fin )  ->  B  e.  Fin )
6259, 61syl 17 . . . . . 6  |-  ( ph  ->  B  e.  Fin )
63 diffi 7821 . . . . . 6  |-  ( B  e.  Fin  ->  ( B  \  C )  e. 
Fin )
6462, 63syl 17 . . . . 5  |-  ( ph  ->  ( B  \  C
)  e.  Fin )
6560simplbi 467 . . . . . . . 8  |-  ( B  e.  ( ~P A  i^i  Fin )  ->  B  C_  A )
6659, 65syl 17 . . . . . . 7  |-  ( ph  ->  B  C_  A )
6766ssdifssd 3560 . . . . . 6  |-  ( ph  ->  ( B  \  C
)  C_  A )
6830, 67fssresd 5762 . . . . 5  |-  ( ph  ->  ( F  |`  ( B  \  C ) ) : ( B  \  C ) --> ( 0 [,] +oo ) )
6934a1i 11 . . . . . 6  |-  ( ph  ->  0  e.  _V )
7068, 64, 69fdmfifsupp 7911 . . . . 5  |-  ( ph  ->  ( F  |`  ( B  \  C ) ) finSupp 
0 )
715, 23, 58, 64, 68, 70gsumcl 17627 . . . 4  |-  ( ph  ->  ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  ( 0 [,] +oo ) )
721, 71sseldi 3416 . . 3  |-  ( ph  ->  ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  RR* )
73 xrge0gsumle.c . . . . . 6  |-  ( ph  ->  C  C_  B )
74 ssfi 7810 . . . . . 6  |-  ( ( B  e.  Fin  /\  C  C_  B )  ->  C  e.  Fin )
7562, 73, 74syl2anc 673 . . . . 5  |-  ( ph  ->  C  e.  Fin )
7673, 66sstrd 3428 . . . . . 6  |-  ( ph  ->  C  C_  A )
7730, 76fssresd 5762 . . . . 5  |-  ( ph  ->  ( F  |`  C ) : C --> ( 0 [,] +oo ) )
7877, 75, 69fdmfifsupp 7911 . . . . 5  |-  ( ph  ->  ( F  |`  C ) finSupp 
0 )
795, 23, 58, 75, 77, 78gsumcl 17627 . . . 4  |-  ( ph  ->  ( G  gsumg  ( F  |`  C ) )  e.  ( 0 [,] +oo ) )
801, 79sseldi 3416 . . 3  |-  ( ph  ->  ( G  gsumg  ( F  |`  C ) )  e.  RR* )
81 elxrge0 11767 . . . . 5  |-  ( ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  ( 0 [,] +oo )  <->  ( ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  RR*  /\  0  <_  ( G  gsumg  ( F  |`  ( B  \  C ) ) ) ) )
8281simprbi 471 . . . 4  |-  ( ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  ( 0 [,] +oo )  -> 
0  <_  ( G  gsumg  ( F  |`  ( B  \  C ) ) ) )
8371, 82syl 17 . . 3  |-  ( ph  ->  0  <_  ( G  gsumg  ( F  |`  ( B  \  C ) ) ) )
84 xleadd2a 11565 . . 3  |-  ( ( ( 0  e.  RR*  /\  ( G  gsumg  ( F  |`  ( B  \  C ) ) )  e.  RR*  /\  ( G  gsumg  ( F  |`  C ) )  e.  RR* )  /\  0  <_  ( G 
gsumg  ( F  |`  ( B 
\  C ) ) ) )  ->  (
( G  gsumg  ( F  |`  C ) ) +e 0 )  <_  ( ( G  gsumg  ( F  |`  C ) ) +e ( G  gsumg  ( F  |`  ( B  \  C ) ) ) ) )
8557, 72, 80, 83, 84syl31anc 1295 . 2  |-  ( ph  ->  ( ( G  gsumg  ( F  |`  C ) ) +e 0 )  <_ 
( ( G  gsumg  ( F  |`  C ) ) +e ( G  gsumg  ( F  |`  ( B  \  C
) ) ) ) )
86 xaddid1 11556 . . 3  |-  ( ( G  gsumg  ( F  |`  C ) )  e.  RR*  ->  ( ( G  gsumg  ( F  |`  C ) ) +e 0 )  =  ( G 
gsumg  ( F  |`  C ) ) )
8780, 86syl 17 . 2  |-  ( ph  ->  ( ( G  gsumg  ( F  |`  C ) ) +e 0 )  =  ( G  gsumg  ( F  |`  C ) ) )
88 ovex 6336 . . . . 5  |-  ( 0 [,] +oo )  e. 
_V
89 xrsadd 19062 . . . . . 6  |-  +e 
=  ( +g  `  RR*s
)
902, 89ressplusg 15317 . . . . 5  |-  ( ( 0 [,] +oo )  e.  _V  ->  +e 
=  ( +g  `  G
) )
9188, 90ax-mp 5 . . . 4  |-  +e 
=  ( +g  `  G
)
9230, 66fssresd 5762 . . . 4  |-  ( ph  ->  ( F  |`  B ) : B --> ( 0 [,] +oo ) )
9392, 62, 69fdmfifsupp 7911 . . . 4  |-  ( ph  ->  ( F  |`  B ) finSupp 
0 )
94 disjdif 3830 . . . . 5  |-  ( C  i^i  ( B  \  C ) )  =  (/)
9594a1i 11 . . . 4  |-  ( ph  ->  ( C  i^i  ( B  \  C ) )  =  (/) )
96 undif2 3834 . . . . 5  |-  ( C  u.  ( B  \  C ) )  =  ( C  u.  B
)
97 ssequn1 3595 . . . . . 6  |-  ( C 
C_  B  <->  ( C  u.  B )  =  B )
9873, 97sylib 201 . . . . 5  |-  ( ph  ->  ( C  u.  B
)  =  B )
9996, 98syl5req 2518 . . . 4  |-  ( ph  ->  B  =  ( C  u.  ( B  \  C ) ) )
1005, 23, 91, 58, 59, 92, 93, 95, 99gsumsplit 17639 . . 3  |-  ( ph  ->  ( G  gsumg  ( F  |`  B ) )  =  ( ( G  gsumg  ( ( F  |`  B )  |`  C ) ) +e ( G  gsumg  ( ( F  |`  B )  |`  ( B  \  C ) ) ) ) )
10173resabs1d 5140 . . . . 5  |-  ( ph  ->  ( ( F  |`  B )  |`  C )  =  ( F  |`  C ) )
102101oveq2d 6324 . . . 4  |-  ( ph  ->  ( G  gsumg  ( ( F  |`  B )  |`  C ) )  =  ( G 
gsumg  ( F  |`  C ) ) )
103 difss 3549 . . . . . 6  |-  ( B 
\  C )  C_  B
104 resabs1 5139 . . . . . 6  |-  ( ( B  \  C ) 
C_  B  ->  (
( F  |`  B )  |`  ( B  \  C
) )  =  ( F  |`  ( B  \  C ) ) )
105103, 104mp1i 13 . . . . 5  |-  ( ph  ->  ( ( F  |`  B )  |`  ( B  \  C ) )  =  ( F  |`  ( B  \  C ) ) )
106105oveq2d 6324 . . . 4  |-  ( ph  ->  ( G  gsumg  ( ( F  |`  B )  |`  ( B  \  C ) ) )  =  ( G 
gsumg  ( F  |`  ( B 
\  C ) ) ) )
107102, 106oveq12d 6326 . . 3  |-  ( ph  ->  ( ( G  gsumg  ( ( F  |`  B )  |`  C ) ) +e ( G  gsumg  ( ( F  |`  B )  |`  ( B  \  C
) ) ) )  =  ( ( G 
gsumg  ( F  |`  C ) ) +e ( G  gsumg  ( F  |`  ( B  \  C ) ) ) ) )
108100, 107eqtr2d 2506 . 2  |-  ( ph  ->  ( ( G  gsumg  ( F  |`  C ) ) +e ( G  gsumg  ( F  |`  ( B  \  C
) ) ) )  =  ( G  gsumg  ( F  |`  B ) ) )
10985, 87, 1083brtr3d 4425 1  |-  ( ph  ->  ( G  gsumg  ( F  |`  C ) )  <_  ( G  gsumg  ( F  |`  B )
) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    /\ wa 376    = wceq 1452    e. wcel 1904    =/= wne 2641   _Vcvv 3031    \ cdif 3387    u. cun 3388    i^i cin 3389    C_ wss 3390   (/)c0 3722   ~Pcpw 3942   {csn 3959   class class class wbr 4395    |-> cmpt 4454   ran crn 4840    |` cres 4841   -->wf 5585   ` cfv 5589  (class class class)co 6308   Fincfn 7587   CCcc 9555   0cc0 9557   +oocpnf 9690   -oocmnf 9691   RR*cxr 9692    <_ cle 9694   +ecxad 11430   [,]cicc 11663   Basecbs 15199   ↾s cress 15200   +g cplusg 15268   0gc0g 15416    gsumg cgsu 15417   RR*scxrs 15476  SubMndcsubmnd 16659  CMndccmn 17508
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1677  ax-4 1690  ax-5 1766  ax-6 1813  ax-7 1859  ax-8 1906  ax-9 1913  ax-10 1932  ax-11 1937  ax-12 1950  ax-13 2104  ax-ext 2451  ax-rep 4508  ax-sep 4518  ax-nul 4527  ax-pow 4579  ax-pr 4639  ax-un 6602  ax-cnex 9613  ax-resscn 9614  ax-1cn 9615  ax-icn 9616  ax-addcl 9617  ax-addrcl 9618  ax-mulcl 9619  ax-mulrcl 9620  ax-mulcom 9621  ax-addass 9622  ax-mulass 9623  ax-distr 9624  ax-i2m1 9625  ax-1ne0 9626  ax-1rid 9627  ax-rnegex 9628  ax-rrecex 9629  ax-cnre 9630  ax-pre-lttri 9631  ax-pre-lttrn 9632  ax-pre-ltadd 9633  ax-pre-mulgt0 9634
This theorem depends on definitions:  df-bi 190  df-or 377  df-an 378  df-3or 1008  df-3an 1009  df-tru 1455  df-ex 1672  df-nf 1676  df-sb 1806  df-eu 2323  df-mo 2324  df-clab 2458  df-cleq 2464  df-clel 2467  df-nfc 2601  df-ne 2643  df-nel 2644  df-ral 2761  df-rex 2762  df-reu 2763  df-rmo 2764  df-rab 2765  df-v 3033  df-sbc 3256  df-csb 3350  df-dif 3393  df-un 3395  df-in 3397  df-ss 3404  df-pss 3406  df-nul 3723  df-if 3873  df-pw 3944  df-sn 3960  df-pr 3962  df-tp 3964  df-op 3966  df-uni 4191  df-int 4227  df-iun 4271  df-iin 4272  df-br 4396  df-opab 4455  df-mpt 4456  df-tr 4491  df-eprel 4750  df-id 4754  df-po 4760  df-so 4761  df-fr 4798  df-se 4799  df-we 4800  df-xp 4845  df-rel 4846  df-cnv 4847  df-co 4848  df-dm 4849  df-rn 4850  df-res 4851  df-ima 4852  df-pred 5387  df-ord 5433  df-on 5434  df-lim 5435  df-suc 5436  df-iota 5553  df-fun 5591  df-fn 5592  df-f 5593  df-f1 5594  df-fo 5595  df-f1o 5596  df-fv 5597  df-isom 5598  df-riota 6270  df-ov 6311  df-oprab 6312  df-mpt2 6313  df-of 6550  df-om 6712  df-1st 6812  df-2nd 6813  df-supp 6934  df-wrecs 7046  df-recs 7108  df-rdg 7146  df-1o 7200  df-oadd 7204  df-er 7381  df-en 7588  df-dom 7589  df-sdom 7590  df-fin 7591  df-fsupp 7902  df-oi 8043  df-card 8391  df-pnf 9695  df-mnf 9696  df-xr 9697  df-ltxr 9698  df-le 9699  df-sub 9882  df-neg 9883  df-nn 10632  df-2 10690  df-3 10691  df-4 10692  df-5 10693  df-6 10694  df-7 10695  df-8 10696  df-9 10697  df-10 10698  df-n0 10894  df-z 10962  df-dec 11075  df-uz 11183  df-xadd 11433  df-icc 11667  df-fz 11811  df-fzo 11943  df-seq 12252  df-hash 12554  df-struct 15201  df-ndx 15202  df-slot 15203  df-base 15204  df-sets 15205  df-ress 15206  df-plusg 15281  df-mulr 15282  df-tset 15287  df-ple 15288  df-ds 15290  df-0g 15418  df-gsum 15419  df-xrs 15478  df-mre 15570  df-mrc 15571  df-acs 15573  df-mgm 16566  df-sgrp 16605  df-mnd 16615  df-submnd 16661  df-cntz 17049  df-cmn 17510
This theorem is referenced by:  xrge0tsms  21930  xrge0tsmsd  28622
  Copyright terms: Public domain W3C validator