ILE Home Intuitionistic Logic Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  ILE Home  >  Th. List  >  cjap Unicode version

Theorem cjap 10678
Description: Complex conjugate and apartness. (Contributed by Jim Kingdon, 14-Jun-2020.)
Assertion
Ref Expression
cjap  |-  ( ( A  e.  CC  /\  B  e.  CC )  ->  ( ( * `  A ) #  ( * `  B )  <->  A #  B
) )

Proof of Theorem cjap
Dummy variables  w  x  y  z are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 cnre 7762 . . 3  |-  ( A  e.  CC  ->  E. x  e.  RR  E. y  e.  RR  A  =  ( x  +  ( _i  x.  y ) ) )
21adantr 274 . 2  |-  ( ( A  e.  CC  /\  B  e.  CC )  ->  E. x  e.  RR  E. y  e.  RR  A  =  ( x  +  ( _i  x.  y
) ) )
3 cnre 7762 . . . . . 6  |-  ( B  e.  CC  ->  E. z  e.  RR  E. w  e.  RR  B  =  ( z  +  ( _i  x.  w ) ) )
43ad3antlr 484 . . . . 5  |-  ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  ->  E. z  e.  RR  E. w  e.  RR  B  =  ( z  +  ( _i  x.  w ) ) )
5 simplrr 525 . . . . . . . . . . . 12  |-  ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  ->  y  e.  RR )
65ad2antrr 479 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  y  e.  RR )
76recnd 7794 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  y  e.  CC )
8 simplrr 525 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  w  e.  RR )
98recnd 7794 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  w  e.  CC )
10 apneg 8373 . . . . . . . . . 10  |-  ( ( y  e.  CC  /\  w  e.  CC )  ->  ( y #  w  <->  -u y #  -u w ) )
117, 9, 10syl2anc 408 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
y #  w  <->  -u y #  -u w ) )
1211orbi2d 779 . . . . . . . 8  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( x #  z  \/  y #  w )  <->  ( x #  z  \/  -u y #  -u w ) ) )
13 simpllr 523 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  A  =  ( x  +  ( _i  x.  y
) ) )
14 simpr 109 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  B  =  ( z  +  ( _i  x.  w
) ) )
1513, 14breq12d 3942 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  ( A #  B  <->  ( x  +  ( _i  x.  y
) ) #  ( z  +  ( _i  x.  w ) ) ) )
16 simplrl 524 . . . . . . . . . . 11  |-  ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  ->  x  e.  RR )
1716ad2antrr 479 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  x  e.  RR )
18 simplrl 524 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  z  e.  RR )
19 apreim 8365 . . . . . . . . . 10  |-  ( ( ( x  e.  RR  /\  y  e.  RR )  /\  ( z  e.  RR  /\  w  e.  RR ) )  -> 
( ( x  +  ( _i  x.  y
) ) #  ( z  +  ( _i  x.  w ) )  <->  ( x #  z  \/  y #  w
) ) )
2017, 6, 18, 8, 19syl22anc 1217 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( x  +  ( _i  x.  y ) ) #  ( z  +  ( _i  x.  w
) )  <->  ( x #  z  \/  y #  w
) ) )
2115, 20bitrd 187 . . . . . . . 8  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  ( A #  B  <->  ( x #  z  \/  y #  w ) ) )
2213fveq2d 5425 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  A )  =  ( * `  ( x  +  (
_i  x.  y )
) ) )
23 cjreim 10675 . . . . . . . . . . . 12  |-  ( ( x  e.  RR  /\  y  e.  RR )  ->  ( * `  (
x  +  ( _i  x.  y ) ) )  =  ( x  -  ( _i  x.  y ) ) )
2417, 6, 23syl2anc 408 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  ( x  +  ( _i  x.  y ) ) )  =  ( x  -  ( _i  x.  y
) ) )
2522, 24eqtrd 2172 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  A )  =  ( x  -  ( _i  x.  y
) ) )
2614fveq2d 5425 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  B )  =  ( * `  ( z  +  ( _i  x.  w ) ) ) )
27 cjreim 10675 . . . . . . . . . . . 12  |-  ( ( z  e.  RR  /\  w  e.  RR )  ->  ( * `  (
z  +  ( _i  x.  w ) ) )  =  ( z  -  ( _i  x.  w ) ) )
2818, 8, 27syl2anc 408 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  ( z  +  ( _i  x.  w ) ) )  =  ( z  -  ( _i  x.  w
) ) )
2926, 28eqtrd 2172 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
* `  B )  =  ( z  -  ( _i  x.  w
) ) )
3025, 29breq12d 3942 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( * `  A
) #  ( * `  B )  <->  ( x  -  ( _i  x.  y ) ) #  ( z  -  ( _i  x.  w ) ) ) )
3117recnd 7794 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  x  e.  CC )
32 ax-icn 7715 . . . . . . . . . . . 12  |-  _i  e.  CC
3332a1i 9 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  _i  e.  CC )
34 submul2 8161 . . . . . . . . . . 11  |-  ( ( x  e.  CC  /\  _i  e.  CC  /\  y  e.  CC )  ->  (
x  -  ( _i  x.  y ) )  =  ( x  +  ( _i  x.  -u y
) ) )
3531, 33, 7, 34syl3anc 1216 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
x  -  ( _i  x.  y ) )  =  ( x  +  ( _i  x.  -u y
) ) )
3618recnd 7794 . . . . . . . . . . 11  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  z  e.  CC )
37 submul2 8161 . . . . . . . . . . 11  |-  ( ( z  e.  CC  /\  _i  e.  CC  /\  w  e.  CC )  ->  (
z  -  ( _i  x.  w ) )  =  ( z  +  ( _i  x.  -u w
) ) )
3836, 33, 9, 37syl3anc 1216 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
z  -  ( _i  x.  w ) )  =  ( z  +  ( _i  x.  -u w
) ) )
3935, 38breq12d 3942 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( x  -  (
_i  x.  y )
) #  ( z  -  ( _i  x.  w
) )  <->  ( x  +  ( _i  x.  -u y ) ) #  ( z  +  ( _i  x.  -u w ) ) ) )
406renegcld 8142 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  -u y  e.  RR )
418renegcld 8142 . . . . . . . . . 10  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  -u w  e.  RR )
42 apreim 8365 . . . . . . . . . 10  |-  ( ( ( x  e.  RR  /\  -u y  e.  RR )  /\  ( z  e.  RR  /\  -u w  e.  RR ) )  -> 
( ( x  +  ( _i  x.  -u y
) ) #  ( z  +  ( _i  x.  -u w ) )  <->  ( x #  z  \/  -u y #  -u w ) ) )
4317, 40, 18, 41, 42syl22anc 1217 . . . . . . . . 9  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( x  +  ( _i  x.  -u y
) ) #  ( z  +  ( _i  x.  -u w ) )  <->  ( x #  z  \/  -u y #  -u w ) ) )
4430, 39, 433bitrd 213 . . . . . . . 8  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( * `  A
) #  ( * `  B )  <->  ( x #  z  \/  -u y #  -u w ) ) )
4512, 21, 443bitr4rd 220 . . . . . . 7  |-  ( ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  /\  A  =  ( x  +  ( _i  x.  y ) ) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  /\  B  =  ( z  +  ( _i  x.  w ) ) )  ->  (
( * `  A
) #  ( * `  B )  <->  A #  B
) )
4645ex 114 . . . . . 6  |-  ( ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  /\  (
z  e.  RR  /\  w  e.  RR )
)  ->  ( B  =  ( z  +  ( _i  x.  w
) )  ->  (
( * `  A
) #  ( * `  B )  <->  A #  B
) ) )
4746rexlimdvva 2557 . . . . 5  |-  ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  ->  ( E. z  e.  RR  E. w  e.  RR  B  =  ( z  +  ( _i  x.  w
) )  ->  (
( * `  A
) #  ( * `  B )  <->  A #  B
) ) )
484, 47mpd 13 . . . 4  |-  ( ( ( ( A  e.  CC  /\  B  e.  CC )  /\  (
x  e.  RR  /\  y  e.  RR )
)  /\  A  =  ( x  +  (
_i  x.  y )
) )  ->  (
( * `  A
) #  ( * `  B )  <->  A #  B
) )
4948ex 114 . . 3  |-  ( ( ( A  e.  CC  /\  B  e.  CC )  /\  ( x  e.  RR  /\  y  e.  RR ) )  -> 
( A  =  ( x  +  ( _i  x.  y ) )  ->  ( ( * `
 A ) #  ( * `  B )  <-> 
A #  B ) ) )
5049rexlimdvva 2557 . 2  |-  ( ( A  e.  CC  /\  B  e.  CC )  ->  ( E. x  e.  RR  E. y  e.  RR  A  =  ( x  +  ( _i  x.  y ) )  ->  ( ( * `
 A ) #  ( * `  B )  <-> 
A #  B ) ) )
512, 50mpd 13 1  |-  ( ( A  e.  CC  /\  B  e.  CC )  ->  ( ( * `  A ) #  ( * `  B )  <->  A #  B
) )
Colors of variables: wff set class
Syntax hints:    -> wi 4    /\ wa 103    <-> wb 104    \/ wo 697    = wceq 1331    e. wcel 1480   E.wrex 2417   class class class wbr 3929   ` cfv 5123  (class class class)co 5774   CCcc 7618   RRcr 7619   _ici 7622    + caddc 7623    x. cmul 7625    - cmin 7933   -ucneg 7934   # cap 8343   *ccj 10611
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-ia1 105  ax-ia2 106  ax-ia3 107  ax-in1 603  ax-in2 604  ax-io 698  ax-5 1423  ax-7 1424  ax-gen 1425  ax-ie1 1469  ax-ie2 1470  ax-8 1482  ax-10 1483  ax-11 1484  ax-i12 1485  ax-bndl 1486  ax-4 1487  ax-13 1491  ax-14 1492  ax-17 1506  ax-i9 1510  ax-ial 1514  ax-i5r 1515  ax-ext 2121  ax-sep 4046  ax-pow 4098  ax-pr 4131  ax-un 4355  ax-setind 4452  ax-cnex 7711  ax-resscn 7712  ax-1cn 7713  ax-1re 7714  ax-icn 7715  ax-addcl 7716  ax-addrcl 7717  ax-mulcl 7718  ax-mulrcl 7719  ax-addcom 7720  ax-mulcom 7721  ax-addass 7722  ax-mulass 7723  ax-distr 7724  ax-i2m1 7725  ax-0lt1 7726  ax-1rid 7727  ax-0id 7728  ax-rnegex 7729  ax-precex 7730  ax-cnre 7731  ax-pre-ltirr 7732  ax-pre-ltwlin 7733  ax-pre-lttrn 7734  ax-pre-apti 7735  ax-pre-ltadd 7736  ax-pre-mulgt0 7737  ax-pre-mulext 7738
This theorem depends on definitions:  df-bi 116  df-3an 964  df-tru 1334  df-fal 1337  df-nf 1437  df-sb 1736  df-eu 2002  df-mo 2003  df-clab 2126  df-cleq 2132  df-clel 2135  df-nfc 2270  df-ne 2309  df-nel 2404  df-ral 2421  df-rex 2422  df-reu 2423  df-rmo 2424  df-rab 2425  df-v 2688  df-sbc 2910  df-dif 3073  df-un 3075  df-in 3077  df-ss 3084  df-pw 3512  df-sn 3533  df-pr 3534  df-op 3536  df-uni 3737  df-br 3930  df-opab 3990  df-mpt 3991  df-id 4215  df-po 4218  df-iso 4219  df-xp 4545  df-rel 4546  df-cnv 4547  df-co 4548  df-dm 4549  df-rn 4550  df-res 4551  df-ima 4552  df-iota 5088  df-fun 5125  df-fn 5126  df-f 5127  df-fv 5131  df-riota 5730  df-ov 5777  df-oprab 5778  df-mpo 5779  df-pnf 7802  df-mnf 7803  df-xr 7804  df-ltxr 7805  df-le 7806  df-sub 7935  df-neg 7936  df-reap 8337  df-ap 8344  df-div 8433  df-2 8779  df-cj 10614  df-re 10615  df-im 10616
This theorem is referenced by:  cjap0  10679
  Copyright terms: Public domain W3C validator