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

Theorem kgentopon 20565
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 4222 . . . . . . 7  |-  ( x 
C_  (𝑘Gen `  J )  ->  U. x  C_  U. (𝑘Gen `  J ) )
2 kgenval 20562 . . . . . . . . 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 3516 . . . . . . . . 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 3484 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  C_  ~P X
)
5 sspwuni 4370 . . . . . . . 8  |-  ( (𝑘Gen `  J )  C_  ~P X 
<-> 
U. (𝑘Gen `  J )  C_  X )
64, 5sylib 200 . . . . . . 7  |-  ( J  e.  (TopOn `  X
)  ->  U. (𝑘Gen `  J )  C_  X
)
71, 6sylan9ssr 3448 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  C_  X
)
8 iunin2 4345 . . . . . . . . . 10  |-  U_ y  e.  x  ( k  i^i  y )  =  ( k  i^i  U_ y  e.  x  y )
9 uniiun 4334 . . . . . . . . . . 11  |-  U. x  =  U_ y  e.  x  y
109ineq2i 3633 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( k  i^i  U_ y  e.  x  y )
11 incom 3627 . . . . . . . . . 10  |-  ( k  i^i  U. x )  =  ( U. x  i^i  k )
128, 10, 113eqtr2i 2481 . . . . . . . . 9  |-  U_ y  e.  x  ( k  i^i  y )  =  ( U. x  i^i  k
)
13 cmptop 20422 . . . . . . . . . . 11  |-  ( ( Jt  k )  e.  Comp  -> 
( Jt  k )  e. 
Top )
1413ad2antll 736 . . . . . . . . . 10  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  ( Jt  k )  e.  Top )
15 incom 3627 . . . . . . . . . . . 12  |-  ( y  i^i  k )  =  ( k  i^i  y
)
16 simplr 763 . . . . . . . . . . . . . 14  |-  ( ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  /\  ( k  e. 
~P X  /\  ( Jt  k )  e.  Comp ) )  ->  x  C_  (𝑘Gen `  J ) )
1716sselda 3434 . . . . . . . . . . . . 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 772 . . . . . . . . . . . . 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 20564 . . . . . . . . . . . . 13  |-  ( ( y  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( y  i^i  k
)  e.  ( Jt  k ) )
2017, 18, 19syl2anc 667 . . . . . . . . . . . 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 2536 . . . . . . . . . . 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 2804 . . . . . . . . . 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 19940 . . . . . . . . . 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 667 . . . . . . . . 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 2536 . . . . . . . 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 620 . . . . . . 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 2804 . . . . . 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 20563 . . . . . . 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 467 . . . . . 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 934 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  x  C_  (𝑘Gen `  J ) )  ->  U. x  e.  (𝑘Gen `  J ) )
3130ex 436 . . . 4  |-  ( J  e.  (TopOn `  X
)  ->  ( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
3231alrimiv 1775 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x
( x  C_  (𝑘Gen `  J )  ->  U. x  e.  (𝑘Gen `  J ) ) )
33 inss1 3654 . . . . . 6  |-  ( x  i^i  y )  C_  x
34 elssuni 4230 . . . . . . . 8  |-  ( x  e.  (𝑘Gen `  J )  ->  x  C_  U. (𝑘Gen `  J
) )
3534ad2antrl 735 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  U. (𝑘Gen `  J ) )
36 ssid 3453 . . . . . . . . . . . 12  |-  X  C_  X
3736a1i 11 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  X  C_  X
)
38 elpwi 3962 . . . . . . . . . . . . . . . 16  |-  ( k  e.  ~P X  -> 
k  C_  X )
3938ad2antrl 735 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
k  C_  X )
40 dfss1 3639 . . . . . . . . . . . . . . 15  |-  ( k 
C_  X  <->  ( X  i^i  k )  =  k )
4139, 40sylib 200 . . . . . . . . . . . . . 14  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  =  k )
4238adantr 467 . . . . . . . . . . . . . . . 16  |-  ( ( k  e.  ~P X  /\  ( Jt  k )  e. 
Comp )  ->  k  C_  X )
43 resttopon 20189 . . . . . . . . . . . . . . . 16  |-  ( ( J  e.  (TopOn `  X )  /\  k  C_  X )  ->  ( Jt  k )  e.  (TopOn `  k ) )
4442, 43sylan2 477 . . . . . . . . . . . . . . 15  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( Jt  k )  e.  (TopOn `  k )
)
45 toponmax 19955 . . . . . . . . . . . . . . 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 2531 . . . . . . . . . . . . 13  |-  ( ( J  e.  (TopOn `  X )  /\  (
k  e.  ~P X  /\  ( Jt  k )  e. 
Comp ) )  -> 
( X  i^i  k
)  e.  ( Jt  k ) )
4847expr 620 . . . . . . . . . . . 12  |-  ( ( J  e.  (TopOn `  X )  /\  k  e.  ~P X )  -> 
( ( Jt  k )  e.  Comp  ->  ( X  i^i  k )  e.  ( Jt  k ) ) )
4948ralrimiva 2804 . . . . . . . . . . 11  |-  ( J  e.  (TopOn `  X
)  ->  A. k  e.  ~P  X ( ( Jt  k )  e.  Comp  -> 
( X  i^i  k
)  e.  ( Jt  k ) ) )
50 elkgen 20563 . . . . . . . . . . 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 934 . . . . . . . . . 10  |-  ( J  e.  (TopOn `  X
)  ->  X  e.  (𝑘Gen
`  J ) )
52 elssuni 4230 . . . . . . . . . 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 3451 . . . . . . . 8  |-  ( J  e.  (TopOn `  X
)  ->  X  =  U. (𝑘Gen `  J ) )
5554adantr 467 . . . . . . 7  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  X  =  U. (𝑘Gen `  J ) )
5635, 55sseqtr4d 3471 . . . . . 6  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  x  C_  X
)
5733, 56syl5ss 3445 . . . . 5  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  C_  X
)
58 inindir 3652 . . . . . . . 8  |-  ( ( x  i^i  y )  i^i  k )  =  ( ( x  i^i  k )  i^i  (
y  i^i  k )
)
5913ad2antll 736 . . . . . . . . 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 771 . . . . . . . . . 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 767 . . . . . . . . . 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 20564 . . . . . . . . . 10  |-  ( ( x  e.  (𝑘Gen `  J
)  /\  ( Jt  k
)  e.  Comp )  ->  ( x  i^i  k
)  e.  ( Jt  k ) )
6360, 61, 62syl2anc 667 . . . . . . . . 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 772 . . . . . . . . . 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 667 . . . . . . . . 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 19941 . . . . . . . . 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 1269 . . . . . . . 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 2535 . . . . . . 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 620 . . . . . 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 2804 . . . . 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 20563 . . . . . 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 467 . . . . 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 934 . . . 4  |-  ( ( J  e.  (TopOn `  X )  /\  (
x  e.  (𝑘Gen `  J
)  /\  y  e.  (𝑘Gen
`  J ) ) )  ->  ( x  i^i  y )  e.  (𝑘Gen `  J ) )
7473ralrimivva 2811 . . 3  |-  ( J  e.  (TopOn `  X
)  ->  A. x  e.  (𝑘Gen `  J ) A. y  e.  (𝑘Gen `  J
) ( x  i^i  y )  e.  (𝑘Gen `  J ) )
75 fvex 5880 . . . 4  |-  (𝑘Gen `  J
)  e.  _V
76 istopg 19937 . . . 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 671 . 2  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  Top )
79 istopon 19952 . 2  |-  ( (𝑘Gen `  J )  e.  (TopOn `  X )  <->  ( (𝑘Gen `  J )  e.  Top  /\  X  =  U. (𝑘Gen `  J ) ) )
8078, 54, 79sylanbrc 671 1  |-  ( J  e.  (TopOn `  X
)  ->  (𝑘Gen `  J
)  e.  (TopOn `  X ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    <-> wb 188    /\ wa 371   A.wal 1444    = wceq 1446    e. wcel 1889   A.wral 2739   {crab 2743   _Vcvv 3047    i^i cin 3405    C_ wss 3406   ~Pcpw 3953   U.cuni 4201   U_ciun 4281   ` cfv 5585  (class class class)co 6295   ↾t crest 15331   Topctop 19929  TopOnctopon 19930   Compccmp 20413  𝑘Genckgen 20560
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1671  ax-4 1684  ax-5 1760  ax-6 1807  ax-7 1853  ax-8 1891  ax-9 1898  ax-10 1917  ax-11 1922  ax-12 1935  ax-13 2093  ax-ext 2433  ax-rep 4518  ax-sep 4528  ax-nul 4537  ax-pow 4584  ax-pr 4642  ax-un 6588
This theorem depends on definitions:  df-bi 189  df-or 372  df-an 373  df-3or 987  df-3an 988  df-tru 1449  df-ex 1666  df-nf 1670  df-sb 1800  df-eu 2305  df-mo 2306  df-clab 2440  df-cleq 2446  df-clel 2449  df-nfc 2583  df-ne 2626  df-ral 2744  df-rex 2745  df-reu 2746  df-rab 2748  df-v 3049  df-sbc 3270  df-csb 3366  df-dif 3409  df-un 3411  df-in 3413  df-ss 3420  df-pss 3422  df-nul 3734  df-if 3884  df-pw 3955  df-sn 3971  df-pr 3973  df-tp 3975  df-op 3977  df-uni 4202  df-int 4238  df-iun 4283  df-br 4406  df-opab 4465  df-mpt 4466  df-tr 4501  df-eprel 4748  df-id 4752  df-po 4758  df-so 4759  df-fr 4796  df-we 4798  df-xp 4843  df-rel 4844  df-cnv 4845  df-co 4846  df-dm 4847  df-rn 4848  df-res 4849  df-ima 4850  df-pred 5383  df-ord 5429  df-on 5430  df-lim 5431  df-suc 5432  df-iota 5549  df-fun 5587  df-fn 5588  df-f 5589  df-f1 5590  df-fo 5591  df-f1o 5592  df-fv 5593  df-ov 6298  df-oprab 6299  df-mpt2 6300  df-om 6698  df-1st 6798  df-2nd 6799  df-wrecs 7033  df-recs 7095  df-rdg 7133  df-oadd 7191  df-er 7368  df-en 7575  df-fin 7578  df-fi 7930  df-rest 15333  df-topgen 15354  df-top 19933  df-bases 19934  df-topon 19935  df-cmp 20414  df-kgen 20561
This theorem is referenced by:  kgenuni  20566  kgenftop  20567  kgenhaus  20571  kgenidm  20574  kgencn  20583  kgencn3  20585  kgen2cn  20586
  Copyright terms: Public domain W3C validator