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

Theorem kgentopon 20630
Description: The compact generator generates a topology. (Contributed by Mario Carneiro, 22-Aug-2015.)
Assertion
Ref Expression
kgentopon  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  (TopOn `  X ) )

Proof of Theorem kgentopon
Dummy variables  y  x  k are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 uniss 4211 . . . . . . 7  |-  ( x 
C_  (𝑘Gen `  J )  ->  U. x  C_  U. (𝑘Gen `  J ) )
2 kgenval 20627 . . . . . . . . 9  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  =  { x  e.  ~P X  |  A. k  e.  ~P  X
( ( Jt  k )  e.  Comp  ->  ( x  i^i  k )  e.  ( Jt  k ) ) } )
3 ssrab2 3500 . . . . . . . . 9  |-  { x  e.  ~P X  |  A. k  e.  ~P  X
( ( Jt  k )  e.  Comp  ->  ( x  i^i  k )  e.  ( Jt  k ) ) }  C_  ~P X
42, 3syl6eqss 3468 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  C_  ~P X
)
5 sspwuni 4360 . . . . . . . 8  |-  ( (𝑘Gen `  J )  C_  ~P X 
<-> 
U. (𝑘Gen `  J )  C_  X )
64, 5sylib 201 . . . . . . 7  |-  ( J  e.  (TopOn `  X
)  ->  U. (𝑘Gen `  J )  C_  X
)
71, 6sylan9ssr 3432 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  C_  X
)
8 iunin2 4333 . . . . . . . . . 10  |-  U_ y  e.  x  ( k  i^i  y )  =  ( k  i^i  U_ y  e.  x  y )
9 uniiun 4322 . . . . . . . . . . 11  |-  U. x  =  U_ y  e.  x  y
109ineq2i 3622 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( k  i^i  U_ y  e.  x  y )
11 incom 3616 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( U. x  i^i  k )
128, 10, 113eqtr2i 2499 . . . . . . . . 9  |-  U_ y  e.  x  ( k  i^i  y )  =  ( U. x  i^i  k
)
13 cmptop 20487 . . . . . . . . . . 11  |-  ( ( Jt  k )  e.  Comp  -> 
( Jt  k )  e. 
Top )
1413ad2antll 743 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  ( Jt  k )  e.  Top )
15 incom 3616 . . . . . . . . . . . 12  |-  ( y  i^i  k )  =  ( k  i^i  y
)
16 simplr 770 . . . . . . . . . . . . . 14  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  x  C_  (𝑘Gen `  J ) )
1716sselda 3418 . . . . . . . . . . . . 13  |-  ( ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J
) )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  /\  y  e.  x )  ->  y  e.  (𝑘Gen `  J
) )
18 simplrr 779 . . . . . . . . . . . . 13  |-  ( ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J
) )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  /\  y  e.  x )  ->  ( Jt  k )  e. 
Comp )
19 kgeni 20629 . . . . . . . . . . . . 13  |-  ( ( y  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( y  i^i  k
)  e.  ( Jt  k ) )
2017, 18, 19syl2anc 673 . . . . . . . . . . . 12  |-  ( ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J
) )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  /\  y  e.  x )  ->  ( y  i^i  k
)  e.  ( Jt  k ) )
2115, 20syl5eqelr 2554 . . . . . . . . . . 11  |-  ( ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J
) )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  /\  y  e.  x )  ->  ( k  i^i  y
)  e.  ( Jt  k ) )
2221ralrimiva 2809 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  A. y  e.  x  ( k  i^i  y )  e.  ( Jt  k ) )
23 iunopn 20005 . . . . . . . . . 10  |-  ( ( ( Jt  k )  e. 
Top  /\  A. y  e.  x  ( k  i^i  y )  e.  ( Jt  k ) )  ->  U_ y  e.  x  ( k  i^i  y
)  e.  ( Jt  k ) )
2414, 22, 23syl2anc 673 . . . . . . . . 9  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  U_ y  e.  x  ( k  i^i  y )  e.  ( Jt  k ) )
2512, 24syl5eqelr 2554 . . . . . . . 8  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  ( U. x  i^i  k
)  e.  ( Jt  k ) )
2625expr 626 . . . . . . 7  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  k  e.  ~P X )  ->  (
( Jt  k )  e. 
Comp  ->  ( U. x  i^i  k )  e.  ( Jt  k ) ) )
2726ralrimiva 2809 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  ->  ( U. x  i^i  k
)  e.  ( Jt  k ) ) )
28 elkgen 20628 . . . . . . 7  |-  ( J  e.  (TopOn `  X
)  ->  ( U. x  e.  (𝑘Gen `  J
)  <->  ( U. x  C_  X  /\  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( U. x  i^i  k )  e.  ( Jt  k ) ) ) ) )
2928adantr 472 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  ( U. x  e.  (𝑘Gen `  J )  <->  ( U. x  C_  X  /\  A. k  e.  ~P  X
( ( Jt  k )  e.  Comp  ->  ( U. x  i^i  k )  e.  ( Jt  k ) ) ) ) )
307, 27, 29mpbir2and 936 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  e.  (𝑘Gen `  J ) )
3130ex 441 . . . 4  |-  ( J  e.  (TopOn `  X
)  ->  ( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
3231alrimiv 1781 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x
( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
33 inss1 3643 . . . . . 6  |-  ( x  i^i  y )  C_  x
34 elssuni 4219 . . . . . . . 8  |-  ( x  e.  (𝑘Gen `  J )  ->  x  C_  U. (𝑘Gen `  J
) )
3534ad2antrl 742 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  U. (𝑘Gen `  J ) )
36 ssid 3437 . . . . . . . . . . . 12  |-  X  C_  X
3736a1i 11 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  X  C_  X
)
38 elpwi 3951 . . . . . . . . . . . . . . . 16  |-  ( k  e.  ~P X  -> 
k  C_  X )
3938ad2antrl 742 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
k  C_  X )
40 dfss1 3628 . . . . . . . . . . . . . . 15  |-  ( k 
C_  X  <->  ( X  i^i  k )  =  k )
4139, 40sylib 201 . . . . . . . . . . . . . 14  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  =  k )
4238adantr 472 . . . . . . . . . . . . . . . 16  |-  ( ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp )  ->  k  C_  X )
43 resttopon 20254 . . . . . . . . . . . . . . . 16  |-  ( ( J  e.  (TopOn `  X )  /\  k  C_  X )  ->  ( Jt  k )  e.  (TopOn `  k ) )
4442, 43sylan2 482 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( Jt  k )  e.  (TopOn `  k )
)
45 toponmax 20020 . . . . . . . . . . . . . . 15  |-  ( ( Jt  k )  e.  (TopOn `  k )  ->  k  e.  ( Jt  k ) )
4644, 45syl 17 . . . . . . . . . . . . . 14  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
k  e.  ( Jt  k ) )
4741, 46eqeltrd 2549 . . . . . . . . . . . . 13  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  e.  ( Jt  k ) )
4847expr 626 . . . . . . . . . . . 12  |-  ( ( J  e.  (TopOn `  X )  /\  k  e.  ~P X )  -> 
( ( Jt  k )  e.  Comp  ->  ( X  i^i  k )  e.  ( Jt  k ) ) )
4948ralrimiva 2809 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( X  i^i  k
)  e.  ( Jt  k ) ) )
50 elkgen 20628 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  ( X  e.  (𝑘Gen `  J )  <->  ( X  C_  X  /\  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( X  i^i  k
)  e.  ( Jt  k ) ) ) ) )
5137, 49, 50mpbir2and 936 . . . . . . . . . 10  |-  ( J  e.  (TopOn `  X
)  ->  X  e.  (𝑘Gen
`  J ) )
52 elssuni 4219 . . . . . . . . . 10  |-  ( X  e.  (𝑘Gen `  J )  ->  X  C_  U. (𝑘Gen `  J
) )
5351, 52syl 17 . . . . . . . . 9  |-  ( J  e.  (TopOn `  X
)  ->  X  C_  U. (𝑘Gen `  J ) )
5453, 6eqssd 3435 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  X  =  U. (𝑘Gen `  J ) )
5554adantr 472 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  X  =  U. (𝑘Gen `  J ) )
5635, 55sseqtr4d 3455 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  X
)
5733, 56syl5ss 3429 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  C_  X
)
58 inindir 3641 . . . . . . . 8  |-  ( ( x  i^i  y )  i^i  k )  =  ( ( x  i^i  k )  i^i  (
y  i^i  k )
)
5913ad2antll 743 . . . . . . . . 9  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( Jt  k )  e. 
Top )
60 simplrl 778 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  ->  x  e.  (𝑘Gen `  J
) )
61 simprr 774 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( Jt  k )  e. 
Comp )
62 kgeni 20629 . . . . . . . . . 10  |-  ( ( x  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( x  i^i  k
)  e.  ( Jt  k ) )
6360, 61, 62syl2anc 673 . . . . . . . . 9  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( x  i^i  k
)  e.  ( Jt  k ) )
64 simplrr 779 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
y  e.  (𝑘Gen `  J
) )
6564, 61, 19syl2anc 673 . . . . . . . . 9  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( y  i^i  k
)  e.  ( Jt  k ) )
66 inopn 20006 . . . . . . . . 9  |-  ( ( ( Jt  k )  e. 
Top  /\  ( x  i^i  k )  e.  ( Jt  k )  /\  (
y  i^i  k )  e.  ( Jt  k ) )  ->  ( ( x  i^i  k )  i^i  ( y  i^i  k
) )  e.  ( Jt  k ) )
6759, 63, 65, 66syl3anc 1292 . . . . . . . 8  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( ( x  i^i  k )  i^i  (
y  i^i  k )
)  e.  ( Jt  k ) )
6858, 67syl5eqel 2553 . . . . . . 7  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( ( x  i^i  y )  i^i  k
)  e.  ( Jt  k ) )
6968expr 626 . . . . . 6  |-  ( ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  /\  k  e. 
~P X )  -> 
( ( Jt  k )  e.  Comp  ->  ( ( x  i^i  y )  i^i  k )  e.  ( Jt  k ) ) )
7069ralrimiva 2809 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( ( x  i^i  y )  i^i  k
)  e.  ( Jt  k ) ) )
71 elkgen 20628 . . . . . 6  |-  ( J  e.  (TopOn `  X
)  ->  ( (
x  i^i  y )  e.  (𝑘Gen `  J )  <->  ( (
x  i^i  y )  C_  X  /\  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( ( x  i^i  y )  i^i  k
)  e.  ( Jt  k ) ) ) ) )
7271adantr 472 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( (
x  i^i  y )  e.  (𝑘Gen `  J )  <->  ( (
x  i^i  y )  C_  X  /\  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( ( x  i^i  y )  i^i  k
)  e.  ( Jt  k ) ) ) ) )
7357, 70, 72mpbir2and 936 . . . 4  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  e.  (𝑘Gen `  J ) )
7473ralrimivva 2814 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x  e.  (𝑘Gen `  J ) A. y  e.  (𝑘Gen `  J
) ( x  i^i  y )  e.  (𝑘Gen `  J ) )
75 fvex 5889 . . . 4  |-  (𝑘Gen `  J
)  e.  _V
76 istopg 20002 . . . 4  |-  ( (𝑘Gen `  J )  e.  _V  ->  ( (𝑘Gen `  J )  e. 
Top 
<->  ( A. x ( x  C_  (𝑘Gen `  J
)  ->  U. x  e.  (𝑘Gen `  J ) )  /\  A. x  e.  (𝑘Gen `  J ) A. y  e.  (𝑘Gen `  J
) ( x  i^i  y )  e.  (𝑘Gen `  J ) ) ) )
7775, 76ax-mp 5 . . 3  |-  ( (𝑘Gen `  J )  e.  Top  <->  ( A. x ( x  C_  (𝑘Gen
`  J )  ->  U. x  e.  (𝑘Gen `  J ) )  /\  A. x  e.  (𝑘Gen `  J
) A. y  e.  (𝑘Gen `  J ) ( x  i^i  y )  e.  (𝑘Gen `  J ) ) )
7832, 74, 77sylanbrc 677 . 2  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  Top )
79 istopon 20017 . 2  |-  ( (𝑘Gen `  J )  e.  (TopOn `  X )  <->  ( (𝑘Gen `  J )  e.  Top  /\  X  =  U. (𝑘Gen `  J ) ) )
8078, 54, 79sylanbrc 677 1  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  (TopOn `  X ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    <-> wb 189    /\ wa 376   A.wal 1450    = wceq 1452    e. wcel 1904   A.wral 2756   {crab 2760   _Vcvv 3031    i^i cin 3389    C_ wss 3390   ~Pcpw 3942   U.cuni 4190   U_ciun 4269   ` cfv 5589  (class class class)co 6308   ↾t crest 15397   Topctop 19994  TopOnctopon 19995   Compccmp 20478  𝑘Genckgen 20625
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
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-ral 2761  df-rex 2762  df-reu 2763  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-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-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-ov 6311  df-oprab 6312  df-mpt2 6313  df-om 6712  df-1st 6812  df-2nd 6813  df-wrecs 7046  df-recs 7108  df-rdg 7146  df-oadd 7204  df-er 7381  df-en 7588  df-fin 7591  df-fi 7943  df-rest 15399  df-topgen 15420  df-top 19998  df-bases 19999  df-topon 20000  df-cmp 20479  df-kgen 20626
This theorem is referenced by:  kgenuni  20631  kgenftop  20632  kgenhaus  20636  kgenidm  20639  kgencn  20648  kgencn3  20650  kgen2cn  20651
  Copyright terms: Public domain W3C validator