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

Theorem kgentopon 21341
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 4458 . . . . . . 7  |-  ( x 
C_  (𝑘Gen `  J )  ->  U. x  C_  U. (𝑘Gen `  J ) )
2 kgenval 21338 . . . . . . . . 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 3687 . . . . . . . . 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 3655 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  C_  ~P X
)
5 sspwuni 4611 . . . . . . . 8  |-  ( (𝑘Gen `  J )  C_  ~P X 
<-> 
U. (𝑘Gen `  J )  C_  X )
64, 5sylib 208 . . . . . . 7  |-  ( J  e.  (TopOn `  X
)  ->  U. (𝑘Gen `  J )  C_  X
)
71, 6sylan9ssr 3617 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  C_  X
)
8 iunin2 4584 . . . . . . . . . 10  |-  U_ y  e.  x  ( k  i^i  y )  =  ( k  i^i  U_ y  e.  x  y )
9 uniiun 4573 . . . . . . . . . . 11  |-  U. x  =  U_ y  e.  x  y
109ineq2i 3811 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( k  i^i  U_ y  e.  x  y )
11 incom 3805 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( U. x  i^i  k )
128, 10, 113eqtr2i 2650 . . . . . . . . 9  |-  U_ y  e.  x  ( k  i^i  y )  =  ( U. x  i^i  k
)
13 cmptop 21198 . . . . . . . . . . 11  |-  ( ( Jt  k )  e.  Comp  -> 
( Jt  k )  e. 
Top )
1413ad2antll 765 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  ( Jt  k )  e.  Top )
15 incom 3805 . . . . . . . . . . . 12  |-  ( y  i^i  k )  =  ( k  i^i  y
)
16 simplr 792 . . . . . . . . . . . . . 14  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  x  C_  (𝑘Gen `  J ) )
1716sselda 3603 . . . . . . . . . . . . 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 801 . . . . . . . . . . . . 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 21340 . . . . . . . . . . . . 13  |-  ( ( y  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( y  i^i  k
)  e.  ( Jt  k ) )
2017, 18, 19syl2anc 693 . . . . . . . . . . . 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 2706 . . . . . . . . . . 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 2966 . . . . . . . . . 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 20703 . . . . . . . . . 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 693 . . . . . . . . 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 2706 . . . . . . . 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 643 . . . . . . 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 2966 . . . . . 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 21339 . . . . . . 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 481 . . . . . 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 957 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  e.  (𝑘Gen `  J ) )
3130ex 450 . . . 4  |-  ( J  e.  (TopOn `  X
)  ->  ( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
3231alrimiv 1855 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x
( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
33 inss1 3833 . . . . . 6  |-  ( x  i^i  y )  C_  x
34 elssuni 4467 . . . . . . . 8  |-  ( x  e.  (𝑘Gen `  J )  ->  x  C_  U. (𝑘Gen `  J
) )
3534ad2antrl 764 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  U. (𝑘Gen `  J ) )
36 ssid 3624 . . . . . . . . . . . 12  |-  X  C_  X
3736a1i 11 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  X  C_  X
)
38 elpwi 4168 . . . . . . . . . . . . . . . 16  |-  ( k  e.  ~P X  -> 
k  C_  X )
3938ad2antrl 764 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
k  C_  X )
40 sseqin2 3817 . . . . . . . . . . . . . . 15  |-  ( k 
C_  X  <->  ( X  i^i  k )  =  k )
4139, 40sylib 208 . . . . . . . . . . . . . 14  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  =  k )
4238adantr 481 . . . . . . . . . . . . . . . 16  |-  ( ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp )  ->  k  C_  X )
43 resttopon 20965 . . . . . . . . . . . . . . . 16  |-  ( ( J  e.  (TopOn `  X )  /\  k  C_  X )  ->  ( Jt  k )  e.  (TopOn `  k ) )
4442, 43sylan2 491 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( Jt  k )  e.  (TopOn `  k )
)
45 toponmax 20730 . . . . . . . . . . . . . . 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 2701 . . . . . . . . . . . . 13  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  e.  ( Jt  k ) )
4847expr 643 . . . . . . . . . . . 12  |-  ( ( J  e.  (TopOn `  X )  /\  k  e.  ~P X )  -> 
( ( Jt  k )  e.  Comp  ->  ( X  i^i  k )  e.  ( Jt  k ) ) )
4948ralrimiva 2966 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( X  i^i  k
)  e.  ( Jt  k ) ) )
50 elkgen 21339 . . . . . . . . . . 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 957 . . . . . . . . . 10  |-  ( J  e.  (TopOn `  X
)  ->  X  e.  (𝑘Gen
`  J ) )
52 elssuni 4467 . . . . . . . . . 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 3620 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  X  =  U. (𝑘Gen `  J ) )
5554adantr 481 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  X  =  U. (𝑘Gen `  J ) )
5635, 55sseqtr4d 3642 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  X
)
5733, 56syl5ss 3614 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  C_  X
)
58 inindir 3831 . . . . . . . 8  |-  ( ( x  i^i  y )  i^i  k )  =  ( ( x  i^i  k )  i^i  (
y  i^i  k )
)
5913ad2antll 765 . . . . . . . . 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 800 . . . . . . . . . 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 796 . . . . . . . . . 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 21340 . . . . . . . . . 10  |-  ( ( x  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( x  i^i  k
)  e.  ( Jt  k ) )
6360, 61, 62syl2anc 693 . . . . . . . . 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 801 . . . . . . . . . 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 693 . . . . . . . . 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 20704 . . . . . . . . 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 1326 . . . . . . . 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 2705 . . . . . . 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 643 . . . . . 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 2966 . . . . 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 21339 . . . . . 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 481 . . . . 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 957 . . . 4  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  e.  (𝑘Gen `  J ) )
7473ralrimivva 2971 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x  e.  (𝑘Gen `  J ) A. y  e.  (𝑘Gen `  J
) ( x  i^i  y )  e.  (𝑘Gen `  J ) )
75 fvex 6201 . . . 4  |-  (𝑘Gen `  J
)  e.  _V
76 istopg 20700 . . . 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 698 . 2  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  Top )
79 istopon 20717 . 2  |-  ( (𝑘Gen `  J )  e.  (TopOn `  X )  <->  ( (𝑘Gen `  J )  e.  Top  /\  X  =  U. (𝑘Gen `  J ) ) )
8078, 54, 79sylanbrc 698 1  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  (TopOn `  X ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    <-> wb 196    /\ wa 384   A.wal 1481    = wceq 1483    e. wcel 1990   A.wral 2912   {crab 2916   _Vcvv 3200    i^i cin 3573    C_ wss 3574   ~Pcpw 4158   U.cuni 4436   U_ciun 4520   ` cfv 5888  (class class class)co 6650   ↾t crest 16081   Topctop 20698  TopOnctopon 20715   Compccmp 21189  𝑘Genckgen 21336
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1722  ax-4 1737  ax-5 1839  ax-6 1888  ax-7 1935  ax-8 1992  ax-9 1999  ax-10 2019  ax-11 2034  ax-12 2047  ax-13 2246  ax-ext 2602  ax-rep 4771  ax-sep 4781  ax-nul 4789  ax-pow 4843  ax-pr 4906  ax-un 6949
This theorem depends on definitions:  df-bi 197  df-or 385  df-an 386  df-3or 1038  df-3an 1039  df-tru 1486  df-ex 1705  df-nf 1710  df-sb 1881  df-eu 2474  df-mo 2475  df-clab 2609  df-cleq 2615  df-clel 2618  df-nfc 2753  df-ne 2795  df-ral 2917  df-rex 2918  df-reu 2919  df-rab 2921  df-v 3202  df-sbc 3436  df-csb 3534  df-dif 3577  df-un 3579  df-in 3581  df-ss 3588  df-pss 3590  df-nul 3916  df-if 4087  df-pw 4160  df-sn 4178  df-pr 4180  df-tp 4182  df-op 4184  df-uni 4437  df-int 4476  df-iun 4522  df-br 4654  df-opab 4713  df-mpt 4730  df-tr 4753  df-id 5024  df-eprel 5029  df-po 5035  df-so 5036  df-fr 5073  df-we 5075  df-xp 5120  df-rel 5121  df-cnv 5122  df-co 5123  df-dm 5124  df-rn 5125  df-res 5126  df-ima 5127  df-pred 5680  df-ord 5726  df-on 5727  df-lim 5728  df-suc 5729  df-iota 5851  df-fun 5890  df-fn 5891  df-f 5892  df-f1 5893  df-fo 5894  df-f1o 5895  df-fv 5896  df-ov 6653  df-oprab 6654  df-mpt2 6655  df-om 7066  df-1st 7168  df-2nd 7169  df-wrecs 7407  df-recs 7468  df-rdg 7506  df-oadd 7564  df-er 7742  df-en 7956  df-fin 7959  df-fi 8317  df-rest 16083  df-topgen 16104  df-top 20699  df-topon 20716  df-bases 20750  df-cmp 21190  df-kgen 21337
This theorem is referenced by:  kgenuni  21342  kgenftop  21343  kgenhaus  21347  kgenidm  21350  kgencn  21359  kgencn3  21361  kgen2cn  21362
  Copyright terms: Public domain W3C validator