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

Theorem xnegdi 11559
Description: Extended real version of xnegdi 11559. (Contributed by Mario Carneiro, 20-Aug-2015.)
Assertion
Ref Expression
xnegdi  |-  ( ( A  e.  RR*  /\  B  e.  RR* )  ->  -e
( A +e
B )  =  ( 
-e A +e  -e B ) )

Proof of Theorem xnegdi
StepHypRef Expression
1 elxr 11439 . 2  |-  ( A  e.  RR*  <->  ( A  e.  RR  \/  A  = +oo  \/  A  = -oo ) )
2 elxr 11439 . . . 4  |-  ( B  e.  RR*  <->  ( B  e.  RR  \/  B  = +oo  \/  B  = -oo ) )
3 recn 9647 . . . . . . . 8  |-  ( A  e.  RR  ->  A  e.  CC )
4 recn 9647 . . . . . . . 8  |-  ( B  e.  RR  ->  B  e.  CC )
5 negdi 9951 . . . . . . . 8  |-  ( ( A  e.  CC  /\  B  e.  CC )  -> 
-u ( A  +  B )  =  (
-u A  +  -u B ) )
63, 4, 5syl2an 485 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  e.  RR )  -> 
-u ( A  +  B )  =  (
-u A  +  -u B ) )
7 readdcl 9640 . . . . . . . 8  |-  ( ( A  e.  RR  /\  B  e.  RR )  ->  ( A  +  B
)  e.  RR )
8 rexneg 11527 . . . . . . . 8  |-  ( ( A  +  B )  e.  RR  ->  -e
( A  +  B
)  =  -u ( A  +  B )
)
97, 8syl 17 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  e.  RR )  -> 
-e ( A  +  B )  = 
-u ( A  +  B ) )
10 renegcl 9957 . . . . . . . 8  |-  ( A  e.  RR  ->  -u A  e.  RR )
11 renegcl 9957 . . . . . . . 8  |-  ( B  e.  RR  ->  -u B  e.  RR )
12 rexadd 11548 . . . . . . . 8  |-  ( (
-u A  e.  RR  /\  -u B  e.  RR )  ->  ( -u A +e -u B
)  =  ( -u A  +  -u B ) )
1310, 11, 12syl2an 485 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  e.  RR )  ->  ( -u A +e -u B )  =  ( -u A  +  -u B ) )
146, 9, 133eqtr4d 2515 . . . . . 6  |-  ( ( A  e.  RR  /\  B  e.  RR )  -> 
-e ( A  +  B )  =  ( -u A +e -u B ) )
15 rexadd 11548 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  e.  RR )  ->  ( A +e
B )  =  ( A  +  B ) )
16 xnegeq 11523 . . . . . . 7  |-  ( ( A +e B )  =  ( A  +  B )  ->  -e ( A +e B )  = 
-e ( A  +  B ) )
1715, 16syl 17 . . . . . 6  |-  ( ( A  e.  RR  /\  B  e.  RR )  -> 
-e ( A +e B )  =  -e ( A  +  B ) )
18 rexneg 11527 . . . . . . 7  |-  ( A  e.  RR  ->  -e
A  =  -u A
)
19 rexneg 11527 . . . . . . 7  |-  ( B  e.  RR  ->  -e
B  =  -u B
)
2018, 19oveqan12d 6327 . . . . . 6  |-  ( ( A  e.  RR  /\  B  e.  RR )  ->  (  -e A +e  -e
B )  =  (
-u A +e -u B ) )
2114, 17, 203eqtr4d 2515 . . . . 5  |-  ( ( A  e.  RR  /\  B  e.  RR )  -> 
-e ( A +e B )  =  (  -e
A +e  -e B ) )
22 xnegpnf 11525 . . . . . 6  |-  -e +oo  = -oo
23 oveq2 6316 . . . . . . . 8  |-  ( B  = +oo  ->  ( A +e B )  =  ( A +e +oo ) )
24 rexr 9704 . . . . . . . . 9  |-  ( A  e.  RR  ->  A  e.  RR* )
25 renemnf 9707 . . . . . . . . 9  |-  ( A  e.  RR  ->  A  =/= -oo )
26 xaddpnf1 11542 . . . . . . . . 9  |-  ( ( A  e.  RR*  /\  A  =/= -oo )  ->  ( A +e +oo )  = +oo )
2724, 25, 26syl2anc 673 . . . . . . . 8  |-  ( A  e.  RR  ->  ( A +e +oo )  = +oo )
2823, 27sylan9eqr 2527 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  = +oo )  ->  ( A +e
B )  = +oo )
29 xnegeq 11523 . . . . . . 7  |-  ( ( A +e B )  = +oo  ->  -e ( A +e B )  = 
-e +oo )
3028, 29syl 17 . . . . . 6  |-  ( ( A  e.  RR  /\  B  = +oo )  -> 
-e ( A +e B )  =  -e +oo )
31 xnegeq 11523 . . . . . . . . 9  |-  ( B  = +oo  ->  -e
B  =  -e +oo )
3231, 22syl6eq 2521 . . . . . . . 8  |-  ( B  = +oo  ->  -e
B  = -oo )
3332oveq2d 6324 . . . . . . 7  |-  ( B  = +oo  ->  (  -e A +e  -e B )  =  (  -e A +e -oo )
)
3418, 10eqeltrd 2549 . . . . . . . 8  |-  ( A  e.  RR  ->  -e
A  e.  RR )
35 rexr 9704 . . . . . . . . 9  |-  (  -e A  e.  RR  -> 
-e A  e. 
RR* )
36 renepnf 9706 . . . . . . . . 9  |-  (  -e A  e.  RR  -> 
-e A  =/= +oo )
37 xaddmnf1 11544 . . . . . . . . 9  |-  ( ( 
-e A  e. 
RR*  /\  -e A  =/= +oo )  -> 
(  -e A +e -oo )  = -oo )
3835, 36, 37syl2anc 673 . . . . . . . 8  |-  (  -e A  e.  RR  ->  (  -e A +e -oo )  = -oo )
3934, 38syl 17 . . . . . . 7  |-  ( A  e.  RR  ->  (  -e A +e -oo )  = -oo )
4033, 39sylan9eqr 2527 . . . . . 6  |-  ( ( A  e.  RR  /\  B  = +oo )  ->  (  -e A +e  -e
B )  = -oo )
4122, 30, 403eqtr4a 2531 . . . . 5  |-  ( ( A  e.  RR  /\  B  = +oo )  -> 
-e ( A +e B )  =  (  -e
A +e  -e B ) )
42 xnegmnf 11526 . . . . . 6  |-  -e -oo  = +oo
43 oveq2 6316 . . . . . . . 8  |-  ( B  = -oo  ->  ( A +e B )  =  ( A +e -oo ) )
44 renepnf 9706 . . . . . . . . 9  |-  ( A  e.  RR  ->  A  =/= +oo )
45 xaddmnf1 11544 . . . . . . . . 9  |-  ( ( A  e.  RR*  /\  A  =/= +oo )  ->  ( A +e -oo )  = -oo )
4624, 44, 45syl2anc 673 . . . . . . . 8  |-  ( A  e.  RR  ->  ( A +e -oo )  = -oo )
4743, 46sylan9eqr 2527 . . . . . . 7  |-  ( ( A  e.  RR  /\  B  = -oo )  ->  ( A +e
B )  = -oo )
48 xnegeq 11523 . . . . . . 7  |-  ( ( A +e B )  = -oo  ->  -e ( A +e B )  = 
-e -oo )
4947, 48syl 17 . . . . . 6  |-  ( ( A  e.  RR  /\  B  = -oo )  -> 
-e ( A +e B )  =  -e -oo )
50 xnegeq 11523 . . . . . . . . 9  |-  ( B  = -oo  ->  -e
B  =  -e -oo )
5150, 42syl6eq 2521 . . . . . . . 8  |-  ( B  = -oo  ->  -e
B  = +oo )
5251oveq2d 6324 . . . . . . 7  |-  ( B  = -oo  ->  (  -e A +e  -e B )  =  (  -e A +e +oo )
)
53 renemnf 9707 . . . . . . . . 9  |-  (  -e A  e.  RR  -> 
-e A  =/= -oo )
54 xaddpnf1 11542 . . . . . . . . 9  |-  ( ( 
-e A  e. 
RR*  /\  -e A  =/= -oo )  -> 
(  -e A +e +oo )  = +oo )
5535, 53, 54syl2anc 673 . . . . . . . 8  |-  (  -e A  e.  RR  ->  (  -e A +e +oo )  = +oo )
5634, 55syl 17 . . . . . . 7  |-  ( A  e.  RR  ->  (  -e A +e +oo )  = +oo )
5752, 56sylan9eqr 2527 . . . . . 6  |-  ( ( A  e.  RR  /\  B  = -oo )  ->  (  -e A +e  -e
B )  = +oo )
5842, 49, 573eqtr4a 2531 . . . . 5  |-  ( ( A  e.  RR  /\  B  = -oo )  -> 
-e ( A +e B )  =  (  -e
A +e  -e B ) )
5921, 41, 583jaodan 1360 . . . 4  |-  ( ( A  e.  RR  /\  ( B  e.  RR  \/  B  = +oo  \/  B  = -oo ) )  ->  -e
( A +e
B )  =  ( 
-e A +e  -e B ) )
602, 59sylan2b 483 . . 3  |-  ( ( A  e.  RR  /\  B  e.  RR* )  ->  -e ( A +e B )  =  (  -e A +e  -e
B ) )
61 xneg0 11528 . . . . . . 7  |-  -e 0  =  0
62 simpr 468 . . . . . . . . . 10  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  B  = -oo )
6362oveq2d 6324 . . . . . . . . 9  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  ( +oo +e B )  =  ( +oo +e -oo ) )
64 pnfaddmnf 11546 . . . . . . . . 9  |-  ( +oo +e -oo )  =  0
6563, 64syl6eq 2521 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  ( +oo +e B )  =  0 )
66 xnegeq 11523 . . . . . . . 8  |-  ( ( +oo +e B )  =  0  ->  -e ( +oo +e B )  = 
-e 0 )
6765, 66syl 17 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  -e
( +oo +e B )  =  -e 0 )
6851adantl 473 . . . . . . . . 9  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  -e
B  = +oo )
6968oveq2d 6324 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  ( -oo +e  -e
B )  =  ( -oo +e +oo ) )
70 mnfaddpnf 11547 . . . . . . . 8  |-  ( -oo +e +oo )  =  0
7169, 70syl6eq 2521 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  ( -oo +e  -e
B )  =  0 )
7261, 67, 713eqtr4a 2531 . . . . . 6  |-  ( ( B  e.  RR*  /\  B  = -oo )  ->  -e
( +oo +e B )  =  ( -oo +e  -e B ) )
73 xaddpnf2 11543 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  ( +oo +e B )  = +oo )
74 xnegeq 11523 . . . . . . . 8  |-  ( ( +oo +e B )  = +oo  ->  -e ( +oo +e B )  = 
-e +oo )
7573, 74syl 17 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  -e
( +oo +e B )  =  -e +oo )
76 xnegcl 11529 . . . . . . . . 9  |-  ( B  e.  RR*  ->  -e
B  e.  RR* )
7776adantr 472 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  -e
B  e.  RR* )
78 xnegeq 11523 . . . . . . . . . . . 12  |-  (  -e B  = +oo  -> 
-e  -e
B  =  -e +oo )
7978, 22syl6eq 2521 . . . . . . . . . . 11  |-  (  -e B  = +oo  -> 
-e  -e
B  = -oo )
80 xnegneg 11530 . . . . . . . . . . . 12  |-  ( B  e.  RR*  ->  -e  -e B  =  B )
8180eqeq1d 2473 . . . . . . . . . . 11  |-  ( B  e.  RR*  ->  (  -e  -e B  = -oo  <->  B  = -oo ) )
8279, 81syl5ib 227 . . . . . . . . . 10  |-  ( B  e.  RR*  ->  (  -e B  = +oo  ->  B  = -oo )
)
8382necon3d 2664 . . . . . . . . 9  |-  ( B  e.  RR*  ->  ( B  =/= -oo  ->  -e
B  =/= +oo )
)
8483imp 436 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  -e
B  =/= +oo )
85 xaddmnf2 11545 . . . . . . . 8  |-  ( ( 
-e B  e. 
RR*  /\  -e B  =/= +oo )  -> 
( -oo +e  -e B )  = -oo )
8677, 84, 85syl2anc 673 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  ( -oo +e  -e
B )  = -oo )
8722, 75, 863eqtr4a 2531 . . . . . 6  |-  ( ( B  e.  RR*  /\  B  =/= -oo )  ->  -e
( +oo +e B )  =  ( -oo +e  -e B ) )
8872, 87pm2.61dane 2730 . . . . 5  |-  ( B  e.  RR*  ->  -e
( +oo +e B )  =  ( -oo +e  -e B ) )
8988adantl 473 . . . 4  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  -e ( +oo +e B )  =  ( -oo +e  -e B ) )
90 simpl 464 . . . . . 6  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  A  = +oo )
9190oveq1d 6323 . . . . 5  |-  ( ( A  = +oo  /\  B  e.  RR* )  -> 
( A +e
B )  =  ( +oo +e B ) )
92 xnegeq 11523 . . . . 5  |-  ( ( A +e B )  =  ( +oo +e B )  ->  -e ( A +e B )  =  -e ( +oo +e B ) )
9391, 92syl 17 . . . 4  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  -e ( A +e B )  = 
-e ( +oo +e B ) )
94 xnegeq 11523 . . . . . . 7  |-  ( A  = +oo  ->  -e
A  =  -e +oo )
9594adantr 472 . . . . . 6  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  -e A  =  -e +oo )
9695, 22syl6eq 2521 . . . . 5  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  -e A  = -oo )
9796oveq1d 6323 . . . 4  |-  ( ( A  = +oo  /\  B  e.  RR* )  -> 
(  -e A +e  -e B )  =  ( -oo +e  -e B ) )
9889, 93, 973eqtr4d 2515 . . 3  |-  ( ( A  = +oo  /\  B  e.  RR* )  ->  -e ( A +e B )  =  (  -e A +e  -e
B ) )
99 simpr 468 . . . . . . . . . 10  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  B  = +oo )
10099oveq2d 6324 . . . . . . . . 9  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  ( -oo +e B )  =  ( -oo +e +oo ) )
101100, 70syl6eq 2521 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  ( -oo +e B )  =  0 )
102 xnegeq 11523 . . . . . . . 8  |-  ( ( -oo +e B )  =  0  ->  -e ( -oo +e B )  = 
-e 0 )
103101, 102syl 17 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  -e
( -oo +e B )  =  -e 0 )
10432adantl 473 . . . . . . . . 9  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  -e
B  = -oo )
105104oveq2d 6324 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  ( +oo +e  -e
B )  =  ( +oo +e -oo ) )
106105, 64syl6eq 2521 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  ( +oo +e  -e
B )  =  0 )
10761, 103, 1063eqtr4a 2531 . . . . . 6  |-  ( ( B  e.  RR*  /\  B  = +oo )  ->  -e
( -oo +e B )  =  ( +oo +e  -e B ) )
108 xaddmnf2 11545 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  ( -oo +e B )  = -oo )
109 xnegeq 11523 . . . . . . . 8  |-  ( ( -oo +e B )  = -oo  ->  -e ( -oo +e B )  = 
-e -oo )
110108, 109syl 17 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  -e
( -oo +e B )  =  -e -oo )
11176adantr 472 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  -e
B  e.  RR* )
112 xnegeq 11523 . . . . . . . . . . . 12  |-  (  -e B  = -oo  -> 
-e  -e
B  =  -e -oo )
113112, 42syl6eq 2521 . . . . . . . . . . 11  |-  (  -e B  = -oo  -> 
-e  -e
B  = +oo )
11480eqeq1d 2473 . . . . . . . . . . 11  |-  ( B  e.  RR*  ->  (  -e  -e B  = +oo  <->  B  = +oo ) )
115113, 114syl5ib 227 . . . . . . . . . 10  |-  ( B  e.  RR*  ->  (  -e B  = -oo  ->  B  = +oo )
)
116115necon3d 2664 . . . . . . . . 9  |-  ( B  e.  RR*  ->  ( B  =/= +oo  ->  -e
B  =/= -oo )
)
117116imp 436 . . . . . . . 8  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  -e
B  =/= -oo )
118 xaddpnf2 11543 . . . . . . . 8  |-  ( ( 
-e B  e. 
RR*  /\  -e B  =/= -oo )  -> 
( +oo +e  -e B )  = +oo )
119111, 117, 118syl2anc 673 . . . . . . 7  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  ( +oo +e  -e
B )  = +oo )
12042, 110, 1193eqtr4a 2531 . . . . . 6  |-  ( ( B  e.  RR*  /\  B  =/= +oo )  ->  -e
( -oo +e B )  =  ( +oo +e  -e B ) )
121107, 120pm2.61dane 2730 . . . . 5  |-  ( B  e.  RR*  ->  -e
( -oo +e B )  =  ( +oo +e  -e B ) )
122121adantl 473 . . . 4  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  -e ( -oo +e B )  =  ( +oo +e  -e B ) )
123 simpl 464 . . . . . 6  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  A  = -oo )
124123oveq1d 6323 . . . . 5  |-  ( ( A  = -oo  /\  B  e.  RR* )  -> 
( A +e
B )  =  ( -oo +e B ) )
125 xnegeq 11523 . . . . 5  |-  ( ( A +e B )  =  ( -oo +e B )  ->  -e ( A +e B )  =  -e ( -oo +e B ) )
126124, 125syl 17 . . . 4  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  -e ( A +e B )  = 
-e ( -oo +e B ) )
127 xnegeq 11523 . . . . . . 7  |-  ( A  = -oo  ->  -e
A  =  -e -oo )
128127adantr 472 . . . . . 6  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  -e A  =  -e -oo )
129128, 42syl6eq 2521 . . . . 5  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  -e A  = +oo )
130129oveq1d 6323 . . . 4  |-  ( ( A  = -oo  /\  B  e.  RR* )  -> 
(  -e A +e  -e B )  =  ( +oo +e  -e B ) )
131122, 126, 1303eqtr4d 2515 . . 3  |-  ( ( A  = -oo  /\  B  e.  RR* )  ->  -e ( A +e B )  =  (  -e A +e  -e
B ) )
13260, 98, 1313jaoian 1359 . 2  |-  ( ( ( A  e.  RR  \/  A  = +oo  \/  A  = -oo )  /\  B  e.  RR* )  ->  -e ( A +e B )  =  (  -e
A +e  -e B ) )
1331, 132sylanb 480 1  |-  ( ( A  e.  RR*  /\  B  e.  RR* )  ->  -e
( A +e
B )  =  ( 
-e A +e  -e B ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    /\ wa 376    \/ w3o 1006    = wceq 1452    e. wcel 1904    =/= wne 2641  (class class class)co 6308   CCcc 9555   RRcr 9556   0cc0 9557    + caddc 9560   +oocpnf 9690   -oocmnf 9691   RR*cxr 9692   -ucneg 9881    -ecxne 11429   +ecxad 11430
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-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
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-rab 2765  df-v 3033  df-sbc 3256  df-csb 3350  df-dif 3393  df-un 3395  df-in 3397  df-ss 3404  df-nul 3723  df-if 3873  df-pw 3944  df-sn 3960  df-pr 3962  df-op 3966  df-uni 4191  df-br 4396  df-opab 4455  df-mpt 4456  df-id 4754  df-po 4760  df-so 4761  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-iota 5553  df-fun 5591  df-fn 5592  df-f 5593  df-f1 5594  df-fo 5595  df-f1o 5596  df-fv 5597  df-riota 6270  df-ov 6311  df-oprab 6312  df-mpt2 6313  df-er 7381  df-en 7588  df-dom 7589  df-sdom 7590  df-pnf 9695  df-mnf 9696  df-xr 9697  df-ltxr 9698  df-sub 9882  df-neg 9883  df-xneg 11432  df-xadd 11433
This theorem is referenced by:  xaddass2  11561  xposdif  11573  xadddi  11606  xrsxmet  21905
  Copyright terms: Public domain W3C validator