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

Theorem sineq0ALT 34084
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 34084. The Virtual Deduction proof is based on Mario Carneiro's revision of Norm Megill's proof of sineq0 22999. 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 22936 . . . . 5  |-  pi  e.  RR
2 pipos 22938 . . . . 5  |-  0  <  pi
31, 2elrpii 11142 . . . 4  |-  pi  e.  RR+
4 2ne0 10545 . . . . . 6  |-  2  =/=  0
54a1i 11 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
2  =/=  0 )
6 2cn 10523 . . . . . . 7  |-  2  e.  CC
7 2re 10522 . . . . . . . 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 463 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  A  e.  CC )
136a1i 11 . . . . . . 7  |-  ( A  e.  CC  ->  2  e.  CC )
1413, 11mulcld 9527 . . . . . 6  |-  ( A  e.  CC  ->  (
2  x.  A )  e.  CC )
15 axicn 9438 . . . . . . . . . . . . . . 15  |-  _i  e.  CC
1615a1i 11 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  _i  e.  CC )
1713, 16, 11mul12d 9700 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
2  x.  ( _i  x.  A ) )  =  ( _i  x.  ( 2  x.  A
) ) )
1816, 11mulcld 9527 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
_i  x.  A )  e.  CC )
19182timesd 10698 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
2  x.  ( _i  x.  A ) )  =  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )
2017, 19eqtr3d 2425 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  (
_i  x.  ( 2  x.  A ) )  =  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )
2120fveq2d 5778 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( _i  x.  ( 2  x.  A
) ) )  =  ( exp `  (
( _i  x.  A
)  +  ( _i  x.  A ) ) ) )
22 efadd 13831 . . . . . . . . . . . 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 659 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( _i  x.  A
) ) )  =  ( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) ) )
2421, 23eqtrd 2423 . . . . . . . . . 10  |-  ( A  e.  CC  ->  ( exp `  ( _i  x.  ( 2  x.  A
) ) )  =  ( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) ) )
2524adantr 463 . . . . . . . . 9  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
_i  x.  ( 2  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A ) )  x.  ( exp `  (
_i  x.  A )
) ) )
26 sinval 13859 . . . . . . . . . . . . . . 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 2444 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( ( exp `  ( _i  x.  A
) )  -  ( exp `  ( -u _i  x.  A ) ) )  /  ( 2  x.  _i ) )  =  0 )
29 efcl 13820 . . . . . . . . . . . . . . . . . 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 9734 . . . . . . . . . . . . . . . . . . . 20  |-  -u _i  e.  CC
3231a1i 11 . . . . . . . . . . . . . . . . . . 19  |-  ( A  e.  CC  ->  -u _i  e.  CC )
3332, 11mulcld 9527 . . . . . . . . . . . . . . . . . 18  |-  ( A  e.  CC  ->  ( -u _i  x.  A )  e.  CC )
34 efcl 13820 . . . . . . . . . . . . . . . . . 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 9844 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  e.  CC )
37 2mulicn 10679 . . . . . . . . . . . . . . . . 17  |-  ( 2  x.  _i )  e.  CC
3837a1i 11 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
2  x.  _i )  e.  CC )
39 2muline0 10680 . . . . . . . . . . . . . . . . 17  |-  ( 2  x.  _i )  =/=  0
4039a1i 11 . . . . . . . . . . . . . . . 16  |-  ( A  e.  CC  ->  (
2  x.  _i )  =/=  0 )
4136, 38, 40diveq0ad 10247 . . . . . . . . . . . . . . 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 463 . . . . . . . . . . . . . 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 9854 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
( ( exp `  (
_i  x.  A )
)  -  ( exp `  ( -u _i  x.  A ) ) )  =  0  <->  ( exp `  ( _i  x.  A
) )  =  ( exp `  ( -u _i  x.  A ) ) ) )
4544adantr 463 . . . . . . . . . . . . 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 6212 . . . . . . . . . . 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 13831 . . . . . . . . . . . . 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 659 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )  =  ( ( exp `  ( _i  x.  A
) )  x.  ( exp `  ( -u _i  x.  A ) ) ) )
5049adantr 463 . . . . . . . . . . 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 2426 . . . . . . . . . 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 9801 . . . . . . . . . . . . . . 15  |-  ( _i  +  -u _i )  =  0
5352oveq1i 6206 . . . . . . . . . . . . . 14  |-  ( ( _i  +  -u _i )  x.  A )  =  ( 0  x.  A )
5416, 32, 11adddird 9532 . . . . . . . . . . . . . 14  |-  ( A  e.  CC  ->  (
( _i  +  -u _i )  x.  A
)  =  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )
5553, 54syl5reqr 2438 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
( _i  x.  A
)  +  ( -u _i  x.  A ) )  =  ( 0  x.  A ) )
5611mul02d 9689 . . . . . . . . . . . . 13  |-  ( A  e.  CC  ->  (
0  x.  A )  =  0 )
5755, 56eqtrd 2423 . . . . . . . . . . . 12  |-  ( A  e.  CC  ->  (
( _i  x.  A
)  +  ( -u _i  x.  A ) )  =  0 )
5857fveq2d 5778 . . . . . . . . . . 11  |-  ( A  e.  CC  ->  ( exp `  ( ( _i  x.  A )  +  ( -u _i  x.  A ) ) )  =  ( exp `  0
) )
5958adantr 463 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
( _i  x.  A
)  +  ( -u _i  x.  A ) ) )  =  ( exp `  0 ) )
60 ef0 13828 . . . . . . . . . . 11  |-  ( exp `  0 )  =  1
6160a1i 11 . . . . . . . . . 10  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  0
)  =  1 )
6251, 59, 613eqtrd 2427 . . . . . . . . 9  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( exp `  (
_i  x.  A )
)  x.  ( exp `  ( _i  x.  A
) ) )  =  1 )
6325, 62eqtrd 2423 . . . . . . . 8  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( exp `  (
_i  x.  ( 2  x.  A ) ) )  =  1 )
6463fveq2d 5778 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  ( abs `  1
) )
65 abs1 13132 . . . . . . 7  |-  ( abs `  1 )  =  1
6664, 65syl6eq 2439 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  1 )
67 absefib 13935 . . . . . . . 8  |-  ( ( 2  x.  A )  e.  CC  ->  (
( 2  x.  A
)  e.  RR  <->  ( abs `  ( exp `  (
_i  x.  ( 2  x.  A ) ) ) )  =  1 ) )
6867biimparc 485 . . . . . . 7  |-  ( ( ( abs `  ( exp `  ( _i  x.  ( 2  x.  A
) ) ) )  =  1  /\  (
2  x.  A )  e.  CC )  -> 
( 2  x.  A
)  e.  RR )
6968ancoms 451 . . . . . 6  |-  ( ( ( 2  x.  A
)  e.  CC  /\  ( abs `  ( exp `  ( _i  x.  (
2  x.  A ) ) ) )  =  1 )  ->  (
2  x.  A )  e.  RR )
7014, 66, 69eel121 33845 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( 2  x.  A
)  e.  RR )
71 mulre 12956 . . . . . . 7  |-  ( ( A  e.  CC  /\  2  e.  RR  /\  2  =/=  0 )  ->  ( A  e.  RR  <->  ( 2  x.  A )  e.  RR ) )
72714animp1 33599 . . . . . 6  |-  ( ( ( ( A  e.  CC  /\  2  e.  RR )  /\  2  =/=  0 )  /\  (
2  x.  A )  e.  RR )  ->  A  e.  RR )
73724an31 33600 . . . . 5  |-  ( ( ( ( 2  =/=  0  /\  2  e.  RR )  /\  A  e.  CC )  /\  (
2  x.  A )  e.  RR )  ->  A  e.  RR )
745, 10, 12, 70, 73eel1111 33857 . . . 4  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  A  e.  RR )
753a1i 11 . . . . . . . . . . . . . . 15  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  e.  RR+ )
7674, 75modcld 11902 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  e.  RR )
7776recnd 9533 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  e.  CC )
7877sincld 13867 . . . . . . . . . . . 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 9507 . . . . . . . . . . . . . . . . . . . . . 22  |-  0  e.  RR
8180, 1, 2ltleii 9618 . . . . . . . . . . . . . . . . . . . . 21  |-  0  <_  pi
82 gt0ne0 9935 . . . . . . . . . . . . . . . . . . . . . . 23  |-  ( ( pi  e.  RR  /\  0  <  pi )  ->  pi  =/=  0 )
83823adant3 1014 . . . . . . . . . . . . . . . . . . . . . 22  |-  ( ( pi  e.  RR  /\  0  <  pi  /\  0  <_  pi )  ->  pi  =/=  0 )
84833com23 1200 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( pi  e.  RR  /\  0  <_  pi  /\  0  <  pi )  ->  pi  =/=  0 )
851, 81, 2, 84mp3an 1322 . . . . . . . . . . . . . . . . . . . 20  |-  pi  =/=  0
8685a1i 11 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  =/=  0 )
8774, 79, 86redivcld 10289 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  /  pi )  e.  RR )
8887flcld 11834 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( |_ `  ( A  /  pi ) )  e.  ZZ )
8988znegcld 10886 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )
90 abssinper 22996 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )  -> 
( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) )  =  ( abs `  ( sin `  A ) ) )
9190eqcomd 2390 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  -u ( |_ `  ( A  /  pi ) )  e.  ZZ )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) )
9291ex 432 . . . . . . . . . . . . . . . . 17  |-  ( A  e.  CC  ->  ( -u ( |_ `  ( A  /  pi ) )  e.  ZZ  ->  ( abs `  ( sin `  A
) )  =  ( abs `  ( sin `  ( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) ) ) )
9392adantr 463 . . . . . . . . . . . . . . . 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 10885 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( |_ `  ( A  /  pi ) )  e.  CC )
9695negcld 9831 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( |_ `  ( A  /  pi ) )  e.  CC )
971recni 9519 . . . . . . . . . . . . . . . . . . . . 21  |-  pi  e.  CC
9897a1i 11 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  pi  e.  CC )
9996, 98mulcld 9527 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  e.  CC )
10098, 95mulcld 9527 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )
101100negcld 9831 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) )  e.  CC )
10295, 98mulneg1d 9927 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( ( |_ `  ( A  /  pi ) )  x.  pi ) )
10395, 98mulcomd 9528 . . . . . . . . . . . . . . . . . . . . 21  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( |_ `  ( A  /  pi ) )  x.  pi )  =  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
104103negeqd 9727 . . . . . . . . . . . . . . . . . . . 20  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -u ( ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
105102, 104eqtrd 2423 . . . . . . . . . . . . . . . . . . 19  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( -u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )
106 oveq2 6204 . . . . . . . . . . . . . . . . . . . . 21  |-  ( (
-u ( |_ `  ( A  /  pi ) )  x.  pi )  =  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
107106ad3antrrr 727 . . . . . . . . . . . . . . . . . . . 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 33601 . . . . . . . . . . . . . . . . . . 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 33857 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  +  -u (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
11012, 100negsubd 9850 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  -u ( pi  x.  ( |_ `  ( A  /  pi ) ) ) )  =  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
111109, 110eqtrd 2423 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  +  (
-u ( |_ `  ( A  /  pi ) )  x.  pi ) )  =  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
112111fveq2d 5778 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) )  =  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) )
113112fveq2d 5778 . . . . . . . . . . . . . . 15  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  ( A  +  ( -u ( |_ `  ( A  /  pi ) )  x.  pi ) ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
11494, 113eqtrd 2423 . . . . . . . . . . . . . 14  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
115 modval 11898 . . . . . . . . . . . . . . . . . 18  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( A  mod  pi )  =  ( A  -  (
pi  x.  ( |_ `  ( A  /  pi ) ) ) ) )
116115fveq2d 5778 . . . . . . . . . . . . . . . . 17  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( sin `  ( A  mod  pi ) )  =  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) )
117116fveq2d 5778 . . . . . . . . . . . . . . . 16  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( abs `  ( sin `  ( A  mod  pi ) ) )  =  ( abs `  ( sin `  ( A  -  ( pi  x.  ( |_ `  ( A  /  pi ) ) ) ) ) ) )
1183, 117mpan2 669 . . . . . . . . . . . . . . 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 2426 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  ( abs `  ( sin `  ( A  mod  pi ) ) ) )
12127fveq2d 5778 . . . . . . . . . . . . . . 15  |-  ( ( sin `  A )  =  0  ->  ( abs `  ( sin `  A
) )  =  ( abs `  0 ) )
122 abs0 13120 . . . . . . . . . . . . . . 15  |-  ( abs `  0 )  =  0
123121, 122syl6eq 2439 . . . . . . . . . . . . . 14  |-  ( ( sin `  A )  =  0  ->  ( abs `  ( sin `  A
) )  =  0 )
124123adantl 464 . . . . . . . . . . . . 13  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  A ) )  =  0 )
125120, 124eqtr3d 2425 . . . . . . . . . . . 12  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( abs `  ( sin `  ( A  mod  pi ) ) )  =  0 )
12678, 125abs00d 13279 . . . . . . . . . . 11  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( sin `  ( A  mod  pi ) )  =  0 )
127 notnot 289 . . . . . . . . . . . . 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 9592 . . . . . . . . . . . . . . . 16  |-  ( ( 0  e.  RR  /\  0  <  ( sin `  ( A  mod  pi ) ) )  ->  ( sin `  ( A  mod  pi ) )  =/=  0
)
130129neneqd 2584 . . . . . . . . . . . . . . 15  |-  ( ( 0  e.  RR  /\  0  <  ( sin `  ( A  mod  pi ) ) )  ->  -.  ( sin `  ( A  mod  pi ) )  =  0 )
131130expcom 433 . . . . . . . . . . . . . 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 22985 . . . . . . . . . 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 9557 . . . . . . . . . . 11  |-  0  e.  RR*
1391rexri 9557 . . . . . . . . . . 11  |-  pi  e.  RR*
140 elioo2 11491 . . . . . . . . . . 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 670 . . . . . . . . . 10  |-  ( ( A  mod  pi )  e.  ( 0 (,) pi )  <->  ( ( A  mod  pi )  e.  RR  /\  0  < 
( A  mod  pi )  /\  ( A  mod  pi )  <  pi ) )
142141notbii 294 . . . . . . . . 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 984 . . . . . . . . 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 294 . . . . . . . 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 11907 . . . . . . . . . 10  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  ( A  mod  pi )  < 
pi )
148147ancoms 451 . . . . . . . . 9  |-  ( ( pi  e.  RR+  /\  A  e.  RR )  ->  ( A  mod  pi )  < 
pi )
1493, 74, 148sylancr 661 . . . . . . . 8  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  <  pi )
15076, 149jca 530 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( ( A  mod  pi )  e.  RR  /\  ( A  mod  pi )  <  pi ) )
151 not12an2impnot1 33685 . . . . . . 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 659 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  ->  -.  0  <  ( A  mod  pi ) )
153 modge0 11906 . . . . . . . . 9  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  0  <_  ( A  mod  pi ) )
154153ancoms 451 . . . . . . . 8  |-  ( ( pi  e.  RR+  /\  A  e.  RR )  ->  0  <_  ( A  mod  pi ) )
1553, 74, 154sylancr 661 . . . . . . 7  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
0  <_  ( A  mod  pi ) )
156 leloe 9582 . . . . . . . . 9  |-  ( ( 0  e.  RR  /\  ( A  mod  pi )  e.  RR )  -> 
( 0  <_  ( A  mod  pi )  <->  ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) ) )
157156biimp3a 1326 . . . . . . . 8  |-  ( ( 0  e.  RR  /\  ( A  mod  pi )  e.  RR  /\  0  <_  ( A  mod  pi ) )  ->  (
0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )
158157idiALT 33551 . . . . . . 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 33835 . . . . . 6  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )
160 pm2.53 371 . . . . . . . 8  |-  ( ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) )  ->  ( -.  0  <  ( A  mod  pi )  ->  0  =  ( A  mod  pi ) ) )
161160imp 427 . . . . . . 7  |-  ( ( ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) )  /\  -.  0  < 
( A  mod  pi ) )  ->  0  =  ( A  mod  pi ) )
162161ancoms 451 . . . . . 6  |-  ( ( -.  0  <  ( A  mod  pi )  /\  ( 0  <  ( A  mod  pi )  \/  0  =  ( A  mod  pi ) ) )  ->  0  =  ( A  mod  pi ) )
163152, 159, 162syl2anc 659 . . . . 5  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
0  =  ( A  mod  pi ) )
164163eqcomd 2390 . . . 4  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  mod  pi )  =  0 )
165 mod0 11903 . . . . . 6  |-  ( ( A  e.  RR  /\  pi  e.  RR+ )  ->  (
( A  mod  pi )  =  0  <->  ( A  /  pi )  e.  ZZ ) )
166165biimp3a 1326 . . . . 5  |-  ( ( A  e.  RR  /\  pi  e.  RR+  /\  ( A  mod  pi )  =  0 )  ->  ( A  /  pi )  e.  ZZ )
1671663com12 1198 . . . 4  |-  ( ( pi  e.  RR+  /\  A  e.  RR  /\  ( A  mod  pi )  =  0 )  ->  ( A  /  pi )  e.  ZZ )
1683, 74, 164, 167eel011 33835 . . 3  |-  ( ( A  e.  CC  /\  ( sin `  A )  =  0 )  -> 
( A  /  pi )  e.  ZZ )
169168ex 432 . 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 10238 . . . . 5  |-  ( A  e.  CC  ->  (
( A  /  pi )  x.  pi )  =  A )
173172fveq2d 5778 . . . 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 22997 . . . . 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 2444 . . 3  |-  ( ( A  e.  CC  /\  ( A  /  pi )  e.  ZZ )  ->  ( sin `  A
)  =  0 )
178177ex 432 . 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 366    /\ wa 367    /\ w3a 971    = wceq 1399    e. wcel 1826    =/= wne 2577   class class class wbr 4367   ` cfv 5496  (class class class)co 6196   CCcc 9401   RRcr 9402   0cc0 9403   1c1 9404   _ici 9405    + caddc 9406    x. cmul 9408   RR*cxr 9538    < clt 9539    <_ cle 9540    - cmin 9718   -ucneg 9719    / cdiv 10123   2c2 10502   ZZcz 10781   RR+crp 11139   (,)cioo 11450   |_cfl 11826    mod cmo 11896   abscabs 13069   expce 13799   sincsin 13801   picpi 13804
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1626  ax-4 1639  ax-5 1712  ax-6 1755  ax-7 1798  ax-8 1828  ax-9 1830  ax-10 1845  ax-11 1850  ax-12 1862  ax-13 2006  ax-ext 2360  ax-rep 4478  ax-sep 4488  ax-nul 4496  ax-pow 4543  ax-pr 4601  ax-un 6491  ax-inf2 7972  ax-cnex 9459  ax-resscn 9460  ax-1cn 9461  ax-icn 9462  ax-addcl 9463  ax-addrcl 9464  ax-mulcl 9465  ax-mulrcl 9466  ax-mulcom 9467  ax-addass 9468  ax-mulass 9469  ax-distr 9470  ax-i2m1 9471  ax-1ne0 9472  ax-1rid 9473  ax-rnegex 9474  ax-rrecex 9475  ax-cnre 9476  ax-pre-lttri 9477  ax-pre-lttrn 9478  ax-pre-ltadd 9479  ax-pre-mulgt0 9480  ax-pre-sup 9481  ax-addf 9482  ax-mulf 9483
This theorem depends on definitions:  df-bi 185  df-or 368  df-an 369  df-3or 972  df-3an 973  df-tru 1402  df-fal 1405  df-ex 1621  df-nf 1625  df-sb 1748  df-eu 2222  df-mo 2223  df-clab 2368  df-cleq 2374  df-clel 2377  df-nfc 2532  df-ne 2579  df-nel 2580  df-ral 2737  df-rex 2738  df-reu 2739  df-rmo 2740  df-rab 2741  df-v 3036  df-sbc 3253  df-csb 3349  df-dif 3392  df-un 3394  df-in 3396  df-ss 3403  df-pss 3405  df-nul 3712  df-if 3858  df-pw 3929  df-sn 3945  df-pr 3947  df-tp 3949  df-op 3951  df-uni 4164  df-int 4200  df-iun 4245  df-iin 4246  df-br 4368  df-opab 4426  df-mpt 4427  df-tr 4461  df-eprel 4705  df-id 4709  df-po 4714  df-so 4715  df-fr 4752  df-se 4753  df-we 4754  df-ord 4795  df-on 4796  df-lim 4797  df-suc 4798  df-xp 4919  df-rel 4920  df-cnv 4921  df-co 4922  df-dm 4923  df-rn 4924  df-res 4925  df-ima 4926  df-iota 5460  df-fun 5498  df-fn 5499  df-f 5500  df-f1 5501  df-fo 5502  df-f1o 5503  df-fv 5504  df-isom 5505  df-riota 6158  df-ov 6199  df-oprab 6200  df-mpt2 6201  df-of 6439  df-om 6600  df-1st 6699  df-2nd 6700  df-supp 6818  df-recs 6960  df-rdg 6994  df-1o 7048  df-2o 7049  df-oadd 7052  df-omul 7053  df-er 7229  df-ec 7231  df-qs 7235  df-map 7340  df-pm 7341  df-ixp 7389  df-en 7436  df-dom 7437  df-sdom 7438  df-fin 7439  df-fsupp 7745  df-fi 7786  df-sup 7816  df-oi 7850  df-card 8233  df-cda 8461  df-ni 9161  df-pli 9162  df-mi 9163  df-lti 9164  df-plpq 9197  df-mpq 9198  df-ltpq 9199  df-enq 9200  df-nq 9201  df-erq 9202  df-plq 9203  df-mq 9204  df-1nq 9205  df-rq 9206  df-ltnq 9207  df-np 9270  df-1p 9271  df-plp 9272  df-enr 9344  df-nr 9345  df-0r 9349  df-1r 9350  df-c 9409  df-i 9412  df-pnf 9541  df-mnf 9542  df-xr 9543  df-ltxr 9544  df-le 9545  df-sub 9720  df-neg 9721  df-div 10124  df-nn 10453  df-2 10511  df-3 10512  df-4 10513  df-5 10514  df-6 10515  df-7 10516  df-8 10517  df-9 10518  df-10 10519  df-n0 10713  df-z 10782  df-dec 10896  df-uz 11002  df-q 11102  df-rp 11140  df-xneg 11239  df-xadd 11240  df-xmul 11241  df-ioo 11454  df-ioc 11455  df-ico 11456  df-icc 11457  df-fz 11594  df-fzo 11718  df-fl 11828  df-mod 11897  df-seq 12011  df-exp 12070  df-fac 12256  df-bc 12283  df-hash 12308  df-shft 12902  df-cj 12934  df-re 12935  df-im 12936  df-sqrt 13070  df-abs 13071  df-limsup 13296  df-clim 13313  df-rlim 13314  df-sum 13511  df-ef 13805  df-sin 13807  df-cos 13808  df-pi 13810  df-struct 14636  df-ndx 14637  df-slot 14638  df-base 14639  df-sets 14640  df-ress 14641  df-plusg 14715  df-mulr 14716  df-starv 14717  df-sca 14718  df-vsca 14719  df-ip 14720  df-tset 14721  df-ple 14722  df-ds 14724  df-unif 14725  df-hom 14726  df-cco 14727  df-rest 14830  df-topn 14831  df-0g 14849  df-gsum 14850  df-topgen 14851  df-pt 14852  df-prds 14855  df-xrs 14909  df-qtop 14914  df-imas 14915  df-xps 14917  df-mre 14993  df-mrc 14994  df-acs 14996  df-mgm 15989  df-sgrp 16028  df-mnd 16038  df-submnd 16084  df-mulg 16177  df-cntz 16472  df-cmn 16917  df-psmet 18524  df-xmet 18525  df-met 18526  df-bl 18527  df-mopn 18528  df-fbas 18529  df-fg 18530  df-cnfld 18534  df-top 19484  df-bases 19486  df-topon 19487  df-topsp 19488  df-cld 19605  df-ntr 19606  df-cls 19607  df-nei 19685  df-lp 19723  df-perf 19724  df-cn 19814  df-cnp 19815  df-haus 19902  df-tx 20148  df-hmeo 20341  df-fil 20432  df-fm 20524  df-flim 20525  df-flf 20526  df-xms 20908  df-ms 20909  df-tms 20910  df-cncf 21467  df-limc 22355  df-dv 22356
This theorem is referenced by: (None)
  Copyright terms: Public domain W3C validator