Users' Mathboxes Mathbox for Alan Sare < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  sineq0ALT Structured version   Unicode version

Theorem sineq0ALT 33605
Description: A complex number whose sine is zero is an integer multiple of  pi. The Virtual Deduction form of the proof is http://us.metamath.org/other/completeusersproof/sineq0altvd.html. The Metamath form of the proof is sineq0ALT 33605. The Virtual Deduction proof is based on Mario Carneiro's revision of Norm Megill's proof of sineq0 22892. The Virtual Deduction proof is verified by automatically transforming it into the Metamath form of the proof using completeusersproof, which is verified by the Metamath program. The proof of http://us.metamath.org/other/completeusersproof/sineq0altro.html is a form of the completed proof which preserves the Virtual Deduction proof's step numbers and their ordering. (Contributed by Alan Sare, 13-Jun-2018.) (Proof modification is discouraged.) (New usage is discouraged.)
Assertion
Ref Expression
sineq0ALT  |-  ( A  e.  CC  ->  (
( sin `  A
)  =  0  <->  ( A  /  pi )  e.  ZZ ) )

Proof of Theorem sineq0ALT
StepHypRef Expression
1 pire 22829 . . . . 5  |-  pi  e.  RR
2 pipos 22831 . . . . 5  |-  0  <  pi
31, 2elrpii 11234 . . . 4  |-  pi  e.  RR+
4 2ne0 10635 . . . . . 6  |-  2  =/=  0
54a1i 11 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
2  =/=  0 )
6 2cn 10613 . . . . . . 7  |-  2  e.  CC
7 2re 10612 . . . . . . . 8  |-  2  e.  RR
87a1i 11 . . . . . . 7  |-  ( 2  e.  CC  ->  2  e.  RR )
96, 8ax-mp 5 . . . . . 6  |-  2  e.  RR
109a1i 11 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
2  e.  RR )
11 id 22 . . . . . 6  |-  ( A  e.  CC  ->  A  e.  CC )
1211adantr 465 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  A  e.  CC )
136a1i 11 . . . . . . 7  |-  ( A  e.  CC  ->  2  e.  CC )
1413, 11mulcld 9619 . . . . . 6  |-  ( A  e.  CC  ->  (
2  x.  A )  e.  CC )
15 axicn 9530 . . . . . . . . . . . . . . 15  |-  _i  e.  CC
1615a1i 11 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  _i  e.  CC )
1713, 16, 11mul12d 9792 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
2  x.  ( _i  x.  A ) )  =  ( _i  x.  ( 2  x.  A
) ) )
1816, 11mulcld 9619 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
_i  x.  A )  e.  CC )
19182timesd 10788 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
2  x.  ( _i  x.  A ) )  =  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )
2017, 19eqtr3d 2486 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  (
_i  x.  ( 2  x.  A ) )  =  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )
2120fveq2d 5860 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( _i  x.  ( 2  x.  A
) ) )  =  ( exp `  (
( _i  x.  A
)  +  ( _i  x.  A ) ) ) )
22 efadd 13811 . . . . . . . . . . . 12  |-  ( ( ( _i  x.  A
)  e.  CC  /\  ( _i  x.  A
)  e.  CC )  ->  ( exp `  (
( _i  x.  A
)  +  ( _i  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A ) )  x.  ( exp `  (
_i  x.  A )
) ) )
2318, 18, 22syl2anc 661 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )  =  ( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) ) )
2421, 23eqtrd 2484 . . . . . . . . . 10  |-  ( A  e.  CC  ->  ( exp `  ( _i  x.  ( 2  x.  A
) ) )  =  ( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) ) )
2524adantr 465 . . . . . . . . 9  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
_i  x.  ( 2  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A ) )  x.  ( exp `  (
_i  x.  A )
) ) )
26 sinval 13839 . . . . . . . . . . . . . . 15  |-  ( A  e.  CC  ->  ( sin `  A )  =  ( ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  /  ( 2  x.  _i ) ) )
27 id 22 . . . . . . . . . . . . . . 15  |-  ( ( sin `  A )  =  0  ->  ( sin `  A )  =  0 )
2826, 27sylan9req 2505 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  /  ( 2  x.  _i ) )  =  0 )
29 efcl 13800 . . . . . . . . . . . . . . . . . 18  |-  ( ( _i  x.  A )  e.  CC  ->  ( exp `  ( _i  x.  A ) )  e.  CC )
3018, 29syl 16 . . . . . . . . . . . . . . . . 17  |-  ( A  e.  CC  ->  ( exp `  ( _i  x.  A ) )  e.  CC )
31 negicn 9826 . . . . . . . . . . . . . . . . . . . 20  |-  -u _i  e.  CC
3231a1i 11 . . . . . . . . . . . . . . . . . . 19  |-  ( A  e.  CC  ->  -u _i  e.  CC )
3332, 11mulcld 9619 . . . . . . . . . . . . . . . . . 18  |-  ( A  e.  CC  ->  ( -u _i  x.  A )  e.  CC )
34 efcl 13800 . . . . . . . . . . . . . . . . . 18  |-  ( (
-u _i  x.  A
)  e.  CC  ->  ( exp `  ( -u _i  x.  A ) )  e.  CC )
3533, 34syl 16 . . . . . . . . . . . . . . . . 17  |-  ( A  e.  CC  ->  ( exp `  ( -u _i  x.  A ) )  e.  CC )
3630, 35subcld 9936 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  e.  CC )
37 2mulicn 10769 . . . . . . . . . . . . . . . . 17  |-  ( 2  x.  _i )  e.  CC
3837a1i 11 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
2  x.  _i )  e.  CC )
39 2muline0 10770 . . . . . . . . . . . . . . . . 17  |-  ( 2  x.  _i )  =/=  0
4039a1i 11 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
2  x.  _i )  =/=  0 )
4136, 38, 40diveq0ad 10337 . . . . . . . . . . . . . . 15  |-  ( A  e.  CC  ->  (
( ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  /  ( 2  x.  _i ) )  =  0  <->  ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  =  0 ) )
4241adantr 465 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( ( ( exp `  ( _i  x.  A ) )  -  ( exp `  ( -u _i  x.  A ) ) )  /  (
2  x.  _i ) )  =  0  <->  (
( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  =  0 ) )
4328, 42mpbid 210 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  =  0 )
4430, 35subeq0ad 9946 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
( ( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  =  0  <->  ( exp `  ( _i  x.  A
) )  =  ( exp `  ( -u _i  x.  A ) ) ) )
4544adantr 465 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  =  0  <->  ( exp `  ( _i  x.  A
) )  =  ( exp `  ( -u _i  x.  A ) ) ) )
4643, 45mpbid 210 . . . . . . . . . . . 12  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
_i  x.  A )
)  =  ( exp `  ( -u _i  x.  A ) ) )
4746oveq2d 6297 . . . . . . . . . . 11  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) )  =  ( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( -u _i  x.  A ) ) ) )
48 efadd 13811 . . . . . . . . . . . . 13  |-  ( ( ( _i  x.  A
)  e.  CC  /\  ( -u _i  x.  A
)  e.  CC )  ->  ( exp `  (
( _i  x.  A
)  +  ( -u _i  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A ) )  x.  ( exp `  ( -u _i  x.  A ) ) ) )
4918, 33, 48syl2anc 661 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A
) )  x.  ( exp `  ( -u _i  x.  A ) ) ) )
5049adantr 465 . . . . . . . . . . 11  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
( _i  x.  A
)  +  ( -u _i  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A ) )  x.  ( exp `  ( -u _i  x.  A ) ) ) )
5147, 50eqtr4d 2487 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) )  =  ( exp `  (
( _i  x.  A
)  +  ( -u _i  x.  A ) ) ) )
5215negidi 9893 . . . . . . . . . . . . . . 15  |-  ( _i  +  -u _i )  =  0
5352oveq1i 6291 . . . . . . . . . . . . . 14  |-  ( ( _i  +  -u _i )  x.  A )  =  ( 0  x.  A )
5416, 32, 11adddird 9624 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
( _i  +  -u _i )  x.  A
)  =  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )
5553, 54syl5reqr 2499 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
( _i  x.  A
)  +  ( -u _i  x.  A ) )  =  ( 0  x.  A ) )
5611mul02d 9781 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
0  x.  A )  =  0 )
5755, 56eqtrd 2484 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  (
( _i  x.  A
)  +  ( -u _i  x.  A ) )  =  0 )
5857fveq2d 5860 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )  =  ( exp `  0
) )
5958adantr 465 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
( _i  x.  A
)  +  ( -u _i  x.  A ) ) )  =  ( exp `  0 ) )
60 ef0 13808 . . . . . . . . . . 11  |-  ( exp `  0 )  =  1
6160a1i 11 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  0
)  =  1 )
6251, 59, 613eqtrd 2488 . . . . . . . . 9  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) )  =  1 )
6325, 62eqtrd 2484 . . . . . . . 8  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
_i  x.  ( 2  x.  A ) ) )  =  1 )
6463fveq2d 5860 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  ( abs `  1
) )
65 abs1 13112 . . . . . . 7  |-  ( abs `  1 )  =  1
6664, 65syl6eq 2500 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  1 )
67 absefib 13915 . . . . . . . 8  |-  ( ( 2  x.  A )  e.  CC  ->  (
( 2  x.  A
)  e.  RR  <->  ( abs `  ( exp `  (
_i  x.  ( 2  x.  A ) ) ) )  =  1 ) )
6867biimparc 487 . . . . . . 7  |-  ( ( ( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  1  /\  (
2  x.  A )  e.  CC )  -> 
( 2  x.  A
)  e.  RR )
6968ancoms 453 . . . . . 6  |-  ( ( ( 2  x.  A
)  e.  CC  /\  ( abs `  ( exp `  ( _i  x.  (
2  x.  A ) ) ) )  =  1 )  ->  (
2  x.  A )  e.  RR )
7014, 66, 69eel121 33373 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( 2  x.  A
)  e.  RR )
71 mulre 12936 . . . . . . 7  |-  ( ( A  e.  CC  /\  2  e.  RR  /\  2  =/=  0 )  ->  ( A  e.  RR  <->  ( 2  x.  A )  e.  RR ) )
72714animp1 33134 . . . . . 6  |-  ( ( ( ( A  e.  CC  /\  2  e.  RR )  /\  2  =/=  0 )  /\  (
2  x.  A )  e.  RR )  ->  A  e.  RR )
73724an31 33135 . . . . 5  |-  ( ( ( ( 2  =/=  0  /\  2  e.  RR )  /\  A  e.  CC )  /\  (
2  x.  A )  e.  RR )  ->  A  e.  RR )
745, 10, 12, 70, 73eel1111 33385 . . . 4  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  A  e.  RR )
753a1i 11 . . . . . . . . . . . . . . 15  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  e.  RR+ )
7674, 75modcld 11984 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  e.  RR )
7776recnd 9625 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  e.  CC )
7877sincld 13847 . . . . . . . . . . . 12  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( sin `  ( A  mod  pi ) )  e.  CC )
791a1i 11 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  e.  RR )
80 0re 9599 . . . . . . . . . . . . . . . . . . . . . 22  |-  0  e.  RR
8180, 1, 2ltleii 9710 . . . . . . . . . . . . . . . . . . . . 21  |-  0  <_  pi
82 gt0ne0 10024 . . . . . . . . . . . . . . . . . . . . . . 23  |-  ( ( pi  e.  RR  /\  0  <  pi )  ->  pi  =/=  0 )
83823adant3 1017 . . . . . . . . . . . . . . . . . . . . . 22  |-  ( ( pi  e.  RR  /\  0  <  pi  /\  0  <_  pi )  ->  pi  =/=  0 )
84833com23 1203 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( pi  e.  RR  /\  0  <_  pi  /\  0  <  pi )  ->  pi  =/=  0 )
851, 81, 2, 84mp3an 1325 . . . . . . . . . . . . . . . . . . . 20  |-  pi  =/=  0
8685a1i 11 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  =/=  0 )
8774, 79, 86redivcld 10379 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  /  pi )  e.  RR )
8887flcld 11917 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( |_ `  ( A  /  pi ) )  e.  ZZ )
8988znegcld 10978 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )
90 abssinper 22889 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )  -> 
( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) )  =  ( abs `  ( sin `  A ) ) )
9190eqcomd 2451 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) )
9291ex 434 . . . . . . . . . . . . . . . . 17  |-  ( A  e.  CC  ->  ( -u ( |_ `  ( A  /  pi ) )  e.  ZZ  ->  ( abs `  ( sin `  A
) )  =  ( abs `  ( sin `  ( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) ) )
9392adantr 465 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  e.  ZZ  ->  ( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) ) )
9489, 93mpd 15 . . . . . . . . . . . . . . 15  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) )
9588zcnd 10977 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( |_ `  ( A  /  pi ) )  e.  CC )
9695negcld 9923 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( |_ `  ( A  /  pi ) )  e.  CC )
971recni 9611 . . . . . . . . . . . . . . . . . . . . 21  |-  pi  e.  CC
9897a1i 11 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  e.  CC )
9996, 98mulcld 9619 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  e.  CC )
10098, 95mulcld 9619 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )
101100negcld 9923 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )
10295, 98mulneg1d 10016 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( ( |_ `  ( A  /  pi ) )  x.  pi ) )
10395, 98mulcomd 9620 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( |_ `  ( A  /  pi ) )  x.  pi )  =  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
104103negeqd 9819 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
105102, 104eqtrd 2484 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
106 oveq2 6289 . . . . . . . . . . . . . . . . . . . . 21  |-  ( (
-u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
107106ad3antrrr 729 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( ( ( ( -u ( |_ `  ( A  /  pi ) )  x.  pi )  = 
-u ( pi  x.  ( |_ `  ( A  /  pi ) ) )  /\  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )  /\  ( -u ( |_ `  ( A  /  pi ) )  x.  pi )  e.  CC )  /\  A  e.  CC )  ->  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
1081074an4132 33136 . . . . . . . . . . . . . . . . . . 19  |-  ( ( ( ( A  e.  CC  /\  ( -u ( |_ `  ( A  /  pi ) )  x.  pi )  e.  CC )  /\  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )  /\  ( -u ( |_ `  ( A  /  pi ) )  x.  pi )  = 
-u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )  ->  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
10912, 99, 101, 105, 108eel1111 33385 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
11012, 100negsubd 9942 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )  =  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
111109, 110eqtrd 2484 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
112111fveq2d 5860 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) )  =  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) )
113112fveq2d 5860 . . . . . . . . . . . . . . 15  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
11494, 113eqtrd 2484 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
115 modval 11980 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( A  mod  pi )  =  ( A  -  (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
116115fveq2d 5860 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( sin `  ( A  mod  pi ) )  =  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) )
117116fveq2d 5860 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( abs `  ( sin `  ( A  mod  pi ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
1183, 117mpan2 671 . . . . . . . . . . . . . . 15  |-  ( A  e.  RR  ->  ( abs `  ( sin `  ( A  mod  pi ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
11974, 118syl 16 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  ( A  mod  pi ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
120114, 119eqtr4d 2487 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  mod  pi ) ) ) )
12127fveq2d 5860 . . . . . . . . . . . . . . 15  |-  ( ( sin `  A )  =  0  ->  ( abs `  ( sin `  A
) )  =  ( abs `  0 ) )
122 abs0 13100 . . . . . . . . . . . . . . 15  |-  ( abs `  0 )  =  0
123121, 122syl6eq 2500 . . . . . . . . . . . . . 14  |-  ( ( sin `  A )  =  0  ->  ( abs `  ( sin `  A
) )  =  0 )
124123adantl 466 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  0 )
125120, 124eqtr3d 2486 . . . . . . . . . . . 12  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  ( A  mod  pi ) ) )  =  0 )
12678, 125abs00d 13259 . . . . . . . . . . 11  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( sin `  ( A  mod  pi ) )  =  0 )
127 notnot 291 . . . . . . . . . . . . 13  |-  ( ( sin `  ( A  mod  pi ) )  =  0  <->  -.  -.  ( sin `  ( A  mod  pi ) )  =  0 )
128127bicomi 202 . . . . . . . . . . . 12  |-  ( -. 
-.  ( sin `  ( A  mod  pi ) )  =  0  <->  ( sin `  ( A  mod  pi ) )  =  0 )
129 ltne 9684 . . . . . . . . . . . . . . . 16  |-  ( ( 0  e.  RR  /\  0  <  ( sin `  ( A  mod  pi ) ) )  ->  ( sin `  ( A  mod  pi ) )  =/=  0
)
130129neneqd 2645 . . . . . . . . . . . . . . 15  |-  ( ( 0  e.  RR  /\  0  <  ( sin `  ( A  mod  pi ) ) )  ->  -.  ( sin `  ( A  mod  pi ) )  =  0 )
131130expcom 435 . . . . . . . . . . . . . 14  |-  ( 0  <  ( sin `  ( A  mod  pi ) )  ->  ( 0  e.  RR  ->  -.  ( sin `  ( A  mod  pi ) )  =  0 ) )
13280, 131mpi 17 . . . . . . . . . . . . 13  |-  ( 0  <  ( sin `  ( A  mod  pi ) )  ->  -.  ( sin `  ( A  mod  pi ) )  =  0 )
133132con3i 135 . . . . . . . . . . . 12  |-  ( -. 
-.  ( sin `  ( A  mod  pi ) )  =  0  ->  -.  0  <  ( sin `  ( A  mod  pi ) ) )
134128, 133sylbir 213 . . . . . . . . . . 11  |-  ( ( sin `  ( A  mod  pi ) )  =  0  ->  -.  0  <  ( sin `  ( A  mod  pi ) ) )
135126, 134syl 16 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  0  <  ( sin `  ( A  mod  pi ) ) )
136 sinq12gt0 22878 . . . . . . . . . 10  |-  ( ( A  mod  pi )  e.  ( 0 (,) pi )  ->  0  <  ( sin `  ( A  mod  pi ) ) )
137135, 136nsyl 121 . . . . . . . . 9  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  ( A  mod  pi )  e.  ( 0 (,) pi ) )
13880rexri 9649 . . . . . . . . . . 11  |-  0  e.  RR*
1391rexri 9649 . . . . . . . . . . 11  |-  pi  e.  RR*
140 elioo2 11581 . . . . . . . . . . 11  |-  ( ( 0  e.  RR*  /\  pi  e.  RR* )  ->  (
( A  mod  pi )  e.  ( 0 (,) pi )  <->  ( ( A  mod  pi )  e.  RR  /\  0  < 
( A  mod  pi )  /\  ( A  mod  pi )  <  pi ) ) )
141138, 139, 140mp2an 672 . . . . . . . . . 10  |-  ( ( A  mod  pi )  e.  ( 0 (,) pi )  <->  ( ( A  mod  pi )  e.  RR  /\  0  < 
( A  mod  pi )  /\  ( A  mod  pi )  <  pi ) )
142141notbii 296 . . . . . . . . 9  |-  ( -.  ( A  mod  pi )  e.  ( 0 (,) pi )  <->  -.  (
( A  mod  pi )  e.  RR  /\  0  <  ( A  mod  pi )  /\  ( A  mod  pi )  <  pi ) )
143137, 142sylib 196 . . . . . . . 8  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  ( ( A  mod  pi )  e.  RR  /\  0  <  ( A  mod  pi )  /\  ( A  mod  pi )  <  pi ) )
144 3anan12 987 . . . . . . . . 9  |-  ( ( ( A  mod  pi )  e.  RR  /\  0  <  ( A  mod  pi )  /\  ( A  mod  pi )  <  pi )  <-> 
( 0  <  ( A  mod  pi )  /\  ( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  <  pi ) ) )
145144notbii 296 . . . . . . . 8  |-  ( -.  ( ( A  mod  pi )  e.  RR  /\  0  <  ( A  mod  pi )  /\  ( A  mod  pi )  <  pi )  <->  -.  (
0  <  ( A  mod  pi )  /\  (
( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  < 
pi ) ) )
146143, 145sylib 196 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  ( 0  <  ( A  mod  pi )  /\  ( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  <  pi ) ) )
147 modlt 11988 . . . . . . . . . 10  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( A  mod  pi )  < 
pi )
148147ancoms 453 . . . . . . . . 9  |-  ( ( pi  e.  RR+  /\  A  e.  RR )  ->  ( A  mod  pi )  < 
pi )
1493, 74, 148sylancr 663 . . . . . . . 8  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  <  pi )
15076, 149jca 532 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  <  pi ) )
151 not12an2impnot1 33213 . . . . . . 7  |-  ( ( -.  ( 0  < 
( A  mod  pi )  /\  ( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  < 
pi ) )  /\  ( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  <  pi ) )  ->  -.  0  <  ( A  mod  pi ) )
152146, 150, 151syl2anc 661 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  0  <  ( A  mod  pi ) )
153 modge0 11987 . . . . . . . . 9  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  0  <_  ( A  mod  pi ) )
154153ancoms 453 . . . . . . . 8  |-  ( ( pi  e.  RR+  /\  A  e.  RR )  ->  0  <_  ( A  mod  pi ) )
1553, 74, 154sylancr 663 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
0  <_  ( A  mod  pi ) )
156 leloe 9674 . . . . . . . . 9  |-  ( ( 0  e.  RR  /\  ( A  mod  pi )  e.  RR )  -> 
( 0  <_  ( A  mod  pi )  <->  ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) ) )
157156biimp3a 1329 . . . . . . . 8  |-  ( ( 0  e.  RR  /\  ( A  mod  pi )  e.  RR  /\  0  <_  ( A  mod  pi ) )  ->  (
0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )
158157idiALT 33086 . . . . . . 7  |-  ( ( 0  e.  RR  /\  ( A  mod  pi )  e.  RR  /\  0  <_  ( A  mod  pi ) )  ->  (
0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )
15980, 76, 155, 158eel011 33363 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )
160 pm2.53 373 . . . . . . . 8  |-  ( ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) )  ->  ( -.  0  <  ( A  mod  pi )  ->  0  =  ( A  mod  pi ) ) )
161160imp 429 . . . . . . 7  |-  ( ( ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) )  /\  -.  0  < 
( A  mod  pi ) )  ->  0  =  ( A  mod  pi ) )
162161ancoms 453 . . . . . 6  |-  ( ( -.  0  <  ( A  mod  pi )  /\  ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )  ->  0  =  ( A  mod  pi ) )
163152, 159, 162syl2anc 661 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
0  =  ( A  mod  pi ) )
164163eqcomd 2451 . . . 4  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  =  0 )
165 mod0 11985 . . . . . 6  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  (
( A  mod  pi )  =  0  <->  ( A  /  pi )  e.  ZZ ) )
166165biimp3a 1329 . . . . 5  |-  ( ( A  e.  RR  /\  pi  e.  RR+  /\  ( A  mod  pi )  =  0 )  ->  ( A  /  pi )  e.  ZZ )
1671663com12 1201 . . . 4  |-  ( ( pi  e.  RR+  /\  A  e.  RR  /\  ( A  mod  pi )  =  0 )  ->  ( A  /  pi )  e.  ZZ )
1683, 74, 164, 167eel011 33363 . . 3  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  /  pi )  e.  ZZ )
169168ex 434 . 2  |-  ( A  e.  CC  ->  (
( sin `  A
)  =  0  -> 
( A  /  pi )  e.  ZZ )
)
17097a1i 11 . . . . . 6  |-  ( A  e.  CC  ->  pi  e.  CC )
17185a1i 11 . . . . . 6  |-  ( A  e.  CC  ->  pi  =/=  0 )
17211, 170, 171divcan1d 10328 . . . . 5  |-  ( A  e.  CC  ->  (
( A  /  pi )  x.  pi )  =  A )
173172fveq2d 5860 . . . 4  |-  ( A  e.  CC  ->  ( sin `  ( ( A  /  pi )  x.  pi ) )  =  ( sin `  A
) )
174 id 22 . . . . 5  |-  ( ( A  /  pi )  e.  ZZ  ->  ( A  /  pi )  e.  ZZ )
175 sinkpi 22890 . . . . 5  |-  ( ( A  /  pi )  e.  ZZ  ->  ( sin `  ( ( A  /  pi )  x.  pi ) )  =  0 )
176174, 175syl 16 . . . 4  |-  ( ( A  /  pi )  e.  ZZ  ->  ( sin `  ( ( A  /  pi )  x.  pi ) )  =  0 )
177173, 176sylan9req 2505 . . 3  |-  ( ( A  e.  CC  /\  ( A  /  pi )  e.  ZZ )  ->  ( sin `  A
)  =  0 )
178177ex 434 . 2  |-  ( A  e.  CC  ->  (
( A  /  pi )  e.  ZZ  ->  ( sin `  A )  =  0 ) )
179169, 178impbid 191 1  |-  ( A  e.  CC  ->  (
( sin `  A
)  =  0  <->  ( A  /  pi )  e.  ZZ ) )
Colors of variables: wff setvar class
Syntax hints:   -. wn 3    -> wi 4    <-> wb 184    \/ wo 368    /\ wa 369    /\ w3a 974    = wceq 1383    e. wcel 1804    =/= wne 2638   class class class wbr 4437   ` cfv 5578  (class class class)co 6281   CCcc 9493   RRcr 9494   0cc0 9495   1c1 9496   _ici 9497    + caddc 9498    x. cmul 9500   RR*cxr 9630    < clt 9631    <_ cle 9632    - cmin 9810   -ucneg 9811    / cdiv 10213   2c2 10592   ZZcz 10871   RR+crp 11231   (,)cioo 11540   |_cfl 11909    mod cmo 11978   abscabs 13049   expce 13779   sincsin 13781   picpi 13784
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1605  ax-4 1618  ax-5 1691  ax-6 1734  ax-7 1776  ax-8 1806  ax-9 1808  ax-10 1823  ax-11 1828  ax-12 1840  ax-13 1985  ax-ext 2421  ax-rep 4548  ax-sep 4558  ax-nul 4566  ax-pow 4615  ax-pr 4676  ax-un 6577  ax-inf2 8061  ax-cnex 9551  ax-resscn 9552  ax-1cn 9553  ax-icn 9554  ax-addcl 9555  ax-addrcl 9556  ax-mulcl 9557  ax-mulrcl 9558  ax-mulcom 9559  ax-addass 9560  ax-mulass 9561  ax-distr 9562  ax-i2m1 9563  ax-1ne0 9564  ax-1rid 9565  ax-rnegex 9566  ax-rrecex 9567  ax-cnre 9568  ax-pre-lttri 9569  ax-pre-lttrn 9570  ax-pre-ltadd 9571  ax-pre-mulgt0 9572  ax-pre-sup 9573  ax-addf 9574  ax-mulf 9575
This theorem depends on definitions:  df-bi 185  df-or 370  df-an 371  df-3or 975  df-3an 976  df-tru 1386  df-fal 1389  df-ex 1600  df-nf 1604  df-sb 1727  df-eu 2272  df-mo 2273  df-clab 2429  df-cleq 2435  df-clel 2438  df-nfc 2593  df-ne 2640  df-nel 2641  df-ral 2798  df-rex 2799  df-reu 2800  df-rmo 2801  df-rab 2802  df-v 3097  df-sbc 3314  df-csb 3421  df-dif 3464  df-un 3466  df-in 3468  df-ss 3475  df-pss 3477  df-nul 3771  df-if 3927  df-pw 3999  df-sn 4015  df-pr 4017  df-tp 4019  df-op 4021  df-uni 4235  df-int 4272  df-iun 4317  df-iin 4318  df-br 4438  df-opab 4496  df-mpt 4497  df-tr 4531  df-eprel 4781  df-id 4785  df-po 4790  df-so 4791  df-fr 4828  df-se 4829  df-we 4830  df-ord 4871  df-on 4872  df-lim 4873  df-suc 4874  df-xp 4995  df-rel 4996  df-cnv 4997  df-co 4998  df-dm 4999  df-rn 5000  df-res 5001  df-ima 5002  df-iota 5541  df-fun 5580  df-fn 5581  df-f 5582  df-f1 5583  df-fo 5584  df-f1o 5585  df-fv 5586  df-isom 5587  df-riota 6242  df-ov 6284  df-oprab 6285  df-mpt2 6286  df-of 6525  df-om 6686  df-1st 6785  df-2nd 6786  df-supp 6904  df-recs 7044  df-rdg 7078  df-1o 7132  df-2o 7133  df-oadd 7136  df-omul 7137  df-er 7313  df-ec 7315  df-qs 7319  df-map 7424  df-pm 7425  df-ixp 7472  df-en 7519  df-dom 7520  df-sdom 7521  df-fin 7522  df-fsupp 7832  df-fi 7873  df-sup 7903  df-oi 7938  df-card 8323  df-cda 8551  df-ni 9253  df-pli 9254  df-mi 9255  df-lti 9256  df-plpq 9289  df-mpq 9290  df-ltpq 9291  df-enq 9292  df-nq 9293  df-erq 9294  df-plq 9295  df-mq 9296  df-1nq 9297  df-rq 9298  df-ltnq 9299  df-np 9362  df-1p 9363  df-plp 9364  df-enr 9436  df-nr 9437  df-0r 9441  df-1r 9442  df-c 9501  df-i 9504  df-pnf 9633  df-mnf 9634  df-xr 9635  df-ltxr 9636  df-le 9637  df-sub 9812  df-neg 9813  df-div 10214  df-nn 10544  df-2 10601  df-3 10602  df-4 10603  df-5 10604  df-6 10605  df-7 10606  df-8 10607  df-9 10608  df-10 10609  df-n0 10803  df-z 10872  df-dec 10987  df-uz 11093  df-q 11194  df-rp 11232  df-xneg 11329  df-xadd 11330  df-xmul 11331  df-ioo 11544  df-ioc 11545  df-ico 11546  df-icc 11547  df-fz 11684  df-fzo 11807  df-fl 11911  df-mod 11979  df-seq 12090  df-exp 12149  df-fac 12336  df-bc 12363  df-hash 12388  df-shft 12882  df-cj 12914  df-re 12915  df-im 12916  df-sqrt 13050  df-abs 13051  df-limsup 13276  df-clim 13293  df-rlim 13294  df-sum 13491  df-ef 13785  df-sin 13787  df-cos 13788  df-pi 13790  df-struct 14616  df-ndx 14617  df-slot 14618  df-base 14619  df-sets 14620  df-ress 14621  df-plusg 14692  df-mulr 14693  df-starv 14694  df-sca 14695  df-vsca 14696  df-ip 14697  df-tset 14698  df-ple 14699  df-ds 14701  df-unif 14702  df-hom 14703  df-cco 14704  df-rest 14802  df-topn 14803  df-0g 14821  df-gsum 14822  df-topgen 14823  df-pt 14824  df-prds 14827  df-xrs 14881  df-qtop 14886  df-imas 14887  df-xps 14889  df-mre 14965  df-mrc 14966  df-acs 14968  df-mgm 15851  df-sgrp 15890  df-mnd 15900  df-submnd 15946  df-mulg 16039  df-cntz 16334  df-cmn 16779  df-psmet 18390  df-xmet 18391  df-met 18392  df-bl 18393  df-mopn 18394  df-fbas 18395  df-fg 18396  df-cnfld 18400  df-top 19377  df-bases 19379  df-topon 19380  df-topsp 19381  df-cld 19498  df-ntr 19499  df-cls 19500  df-nei 19577  df-lp 19615  df-perf 19616  df-cn 19706  df-cnp 19707  df-haus 19794  df-tx 20041  df-hmeo 20234  df-fil 20325  df-fm 20417  df-flim 20418  df-flf 20419  df-xms 20801  df-ms 20802  df-tms 20803  df-cncf 21360  df-limc 22248  df-dv 22249
This theorem is referenced by: (None)
  Copyright terms: Public domain W3C validator