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

Theorem lcmgcd 12078
Description: The product of two numbers' least common multiple and greatest common divisor is the absolute value of the product of the two numbers. In particular, that absolute value is the least common multiple of two coprime numbers, for which (๐‘€ gcd ๐‘) = 1.

Multiple methods exist for proving this, and it is often proven either as a consequence of the fundamental theorem of arithmetic or of Bรฉzout's identity bezout 12012; see, e.g., https://proofwiki.org/wiki/Product_of_GCD_and_LCM 12012 and https://math.stackexchange.com/a/470827 12012. This proof uses the latter to first confirm it for positive integers ๐‘€ and ๐‘ (the "Second Proof" in the above Stack Exchange page), then shows that implies it for all nonzero integer inputs, then finally uses lcm0val 12065 to show it applies when either or both inputs are zero. (Contributed by Steve Rodriguez, 20-Jan-2020.)

Assertion
Ref Expression
lcmgcd ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))

Proof of Theorem lcmgcd
StepHypRef Expression
1 gcdcl 11967 . . . . . . . 8 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (๐‘€ gcd ๐‘) โˆˆ โ„•0)
21nn0cnd 9231 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (๐‘€ gcd ๐‘) โˆˆ โ„‚)
32mul02d 8349 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (0 ยท (๐‘€ gcd ๐‘)) = 0)
4 0z 9264 . . . . . . . . . 10 0 โˆˆ โ„ค
5 lcmcom 12064 . . . . . . . . . 10 ((๐‘ โˆˆ โ„ค โˆง 0 โˆˆ โ„ค) โ†’ (๐‘ lcm 0) = (0 lcm ๐‘))
64, 5mpan2 425 . . . . . . . . 9 (๐‘ โˆˆ โ„ค โ†’ (๐‘ lcm 0) = (0 lcm ๐‘))
7 lcm0val 12065 . . . . . . . . 9 (๐‘ โˆˆ โ„ค โ†’ (๐‘ lcm 0) = 0)
86, 7eqtr3d 2212 . . . . . . . 8 (๐‘ โˆˆ โ„ค โ†’ (0 lcm ๐‘) = 0)
98adantl 277 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (0 lcm ๐‘) = 0)
109oveq1d 5890 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((0 lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (0 ยท (๐‘€ gcd ๐‘)))
11 zcn 9258 . . . . . . . . 9 (๐‘ โˆˆ โ„ค โ†’ ๐‘ โˆˆ โ„‚)
1211adantl 277 . . . . . . . 8 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ๐‘ โˆˆ โ„‚)
1312mul02d 8349 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (0 ยท ๐‘) = 0)
1413abs00bd 11075 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜(0 ยท ๐‘)) = 0)
153, 10, 143eqtr4d 2220 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((0 lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(0 ยท ๐‘)))
1615adantr 276 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ ((0 lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(0 ยท ๐‘)))
17 simpr 110 . . . . . 6 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ ๐‘€ = 0)
1817oveq1d 5890 . . . . 5 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ (๐‘€ lcm ๐‘) = (0 lcm ๐‘))
1918oveq1d 5890 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = ((0 lcm ๐‘) ยท (๐‘€ gcd ๐‘)))
2017oveq1d 5890 . . . . 5 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ (๐‘€ ยท ๐‘) = (0 ยท ๐‘))
2120fveq2d 5520 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ (absโ€˜(๐‘€ ยท ๐‘)) = (absโ€˜(0 ยท ๐‘)))
2216, 19, 213eqtr4d 2220 . . 3 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘€ = 0) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))
23 lcm0val 12065 . . . . . . . 8 (๐‘€ โˆˆ โ„ค โ†’ (๐‘€ lcm 0) = 0)
2423adantr 276 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (๐‘€ lcm 0) = 0)
2524oveq1d 5890 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((๐‘€ lcm 0) ยท (๐‘€ gcd ๐‘)) = (0 ยท (๐‘€ gcd ๐‘)))
26 zcn 9258 . . . . . . . . 9 (๐‘€ โˆˆ โ„ค โ†’ ๐‘€ โˆˆ โ„‚)
2726adantr 276 . . . . . . . 8 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ๐‘€ โˆˆ โ„‚)
2827mul01d 8350 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (๐‘€ ยท 0) = 0)
2928abs00bd 11075 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜(๐‘€ ยท 0)) = 0)
303, 25, 293eqtr4d 2220 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((๐‘€ lcm 0) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท 0)))
3130adantr 276 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ ((๐‘€ lcm 0) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท 0)))
32 simpr 110 . . . . . 6 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ ๐‘ = 0)
3332oveq2d 5891 . . . . 5 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ (๐‘€ lcm ๐‘) = (๐‘€ lcm 0))
3433oveq1d 5890 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = ((๐‘€ lcm 0) ยท (๐‘€ gcd ๐‘)))
3532oveq2d 5891 . . . . 5 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ (๐‘€ ยท ๐‘) = (๐‘€ ยท 0))
3635fveq2d 5520 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ (absโ€˜(๐‘€ ยท ๐‘)) = (absโ€˜(๐‘€ ยท 0)))
3731, 34, 363eqtr4d 2220 . . 3 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ๐‘ = 0) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))
3822, 37jaodan 797 . 2 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))
39 neanior 2434 . . . . 5 ((๐‘€ โ‰  0 โˆง ๐‘ โ‰  0) โ†” ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0))
40 nnabscl 11109 . . . . . . 7 ((๐‘€ โˆˆ โ„ค โˆง ๐‘€ โ‰  0) โ†’ (absโ€˜๐‘€) โˆˆ โ„•)
41 nnabscl 11109 . . . . . . 7 ((๐‘ โˆˆ โ„ค โˆง ๐‘ โ‰  0) โ†’ (absโ€˜๐‘) โˆˆ โ„•)
4240, 41anim12i 338 . . . . . 6 (((๐‘€ โˆˆ โ„ค โˆง ๐‘€ โ‰  0) โˆง (๐‘ โˆˆ โ„ค โˆง ๐‘ โ‰  0)) โ†’ ((absโ€˜๐‘€) โˆˆ โ„• โˆง (absโ€˜๐‘) โˆˆ โ„•))
4342an4s 588 . . . . 5 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง (๐‘€ โ‰  0 โˆง ๐‘ โ‰  0)) โ†’ ((absโ€˜๐‘€) โˆˆ โ„• โˆง (absโ€˜๐‘) โˆˆ โ„•))
4439, 43sylan2br 288 . . . 4 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ ((absโ€˜๐‘€) โˆˆ โ„• โˆง (absโ€˜๐‘) โˆˆ โ„•))
45 lcmgcdlem 12077 . . . . 5 (((absโ€˜๐‘€) โˆˆ โ„• โˆง (absโ€˜๐‘) โˆˆ โ„•) โ†’ ((((absโ€˜๐‘€) lcm (absโ€˜๐‘)) ยท ((absโ€˜๐‘€) gcd (absโ€˜๐‘))) = (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))) โˆง ((0 โˆˆ โ„• โˆง ((absโ€˜๐‘€) โˆฅ 0 โˆง (absโ€˜๐‘) โˆฅ 0)) โ†’ ((absโ€˜๐‘€) lcm (absโ€˜๐‘)) โˆฅ 0)))
4645simpld 112 . . . 4 (((absโ€˜๐‘€) โˆˆ โ„• โˆง (absโ€˜๐‘) โˆˆ โ„•) โ†’ (((absโ€˜๐‘€) lcm (absโ€˜๐‘)) ยท ((absโ€˜๐‘€) gcd (absโ€˜๐‘))) = (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))))
4744, 46syl 14 . . 3 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ (((absโ€˜๐‘€) lcm (absโ€˜๐‘)) ยท ((absโ€˜๐‘€) gcd (absโ€˜๐‘))) = (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))))
48 lcmabs 12076 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((absโ€˜๐‘€) lcm (absโ€˜๐‘)) = (๐‘€ lcm ๐‘))
49 gcdabs 11989 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((absโ€˜๐‘€) gcd (absโ€˜๐‘)) = (๐‘€ gcd ๐‘))
5048, 49oveq12d 5893 . . . 4 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (((absโ€˜๐‘€) lcm (absโ€˜๐‘)) ยท ((absโ€˜๐‘€) gcd (absโ€˜๐‘))) = ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)))
5150adantr 276 . . 3 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ (((absโ€˜๐‘€) lcm (absโ€˜๐‘)) ยท ((absโ€˜๐‘€) gcd (absโ€˜๐‘))) = ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)))
52 absidm 11107 . . . . . . 7 (๐‘€ โˆˆ โ„‚ โ†’ (absโ€˜(absโ€˜๐‘€)) = (absโ€˜๐‘€))
53 absidm 11107 . . . . . . 7 (๐‘ โˆˆ โ„‚ โ†’ (absโ€˜(absโ€˜๐‘)) = (absโ€˜๐‘))
5452, 53oveqan12d 5894 . . . . . 6 ((๐‘€ โˆˆ โ„‚ โˆง ๐‘ โˆˆ โ„‚) โ†’ ((absโ€˜(absโ€˜๐‘€)) ยท (absโ€˜(absโ€˜๐‘))) = ((absโ€˜๐‘€) ยท (absโ€˜๐‘)))
5526, 11, 54syl2an 289 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((absโ€˜(absโ€˜๐‘€)) ยท (absโ€˜(absโ€˜๐‘))) = ((absโ€˜๐‘€) ยท (absโ€˜๐‘)))
56 nn0abscl 11094 . . . . . . . 8 (๐‘€ โˆˆ โ„ค โ†’ (absโ€˜๐‘€) โˆˆ โ„•0)
5756nn0cnd 9231 . . . . . . 7 (๐‘€ โˆˆ โ„ค โ†’ (absโ€˜๐‘€) โˆˆ โ„‚)
5857adantr 276 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜๐‘€) โˆˆ โ„‚)
59 nn0abscl 11094 . . . . . . . 8 (๐‘ โˆˆ โ„ค โ†’ (absโ€˜๐‘) โˆˆ โ„•0)
6059nn0cnd 9231 . . . . . . 7 (๐‘ โˆˆ โ„ค โ†’ (absโ€˜๐‘) โˆˆ โ„‚)
6160adantl 277 . . . . . 6 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜๐‘) โˆˆ โ„‚)
6258, 61absmuld 11203 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))) = ((absโ€˜(absโ€˜๐‘€)) ยท (absโ€˜(absโ€˜๐‘))))
6327, 12absmuld 11203 . . . . 5 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜(๐‘€ ยท ๐‘)) = ((absโ€˜๐‘€) ยท (absโ€˜๐‘)))
6455, 62, 633eqtr4d 2220 . . . 4 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))) = (absโ€˜(๐‘€ ยท ๐‘)))
6564adantr 276 . . 3 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ (absโ€˜((absโ€˜๐‘€) ยท (absโ€˜๐‘))) = (absโ€˜(๐‘€ ยท ๐‘)))
6647, 51, 653eqtr3d 2218 . 2 (((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โˆง ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))
67 lcmmndc 12062 . . 3 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ DECID (๐‘€ = 0 โˆจ ๐‘ = 0))
68 exmiddc 836 . . 3 (DECID (๐‘€ = 0 โˆจ ๐‘ = 0) โ†’ ((๐‘€ = 0 โˆจ ๐‘ = 0) โˆจ ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)))
6967, 68syl 14 . 2 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((๐‘€ = 0 โˆจ ๐‘ = 0) โˆจ ยฌ (๐‘€ = 0 โˆจ ๐‘ = 0)))
7038, 66, 69mpjaodan 798 1 ((๐‘€ โˆˆ โ„ค โˆง ๐‘ โˆˆ โ„ค) โ†’ ((๐‘€ lcm ๐‘) ยท (๐‘€ gcd ๐‘)) = (absโ€˜(๐‘€ ยท ๐‘)))
Colors of variables: wff set class
Syntax hints:  ยฌ wn 3   โ†’ wi 4   โˆง wa 104   โˆจ wo 708  DECID wdc 834   = wceq 1353   โˆˆ wcel 2148   โ‰  wne 2347   class class class wbr 4004  โ€˜cfv 5217  (class class class)co 5875  โ„‚cc 7809  0cc0 7811   ยท cmul 7816  โ„•cn 8919  โ„คcz 9253  abscabs 11006   โˆฅ cdvds 11794   gcd cgcd 11943   lcm clcm 12060
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-ia1 106  ax-ia2 107  ax-ia3 108  ax-in1 614  ax-in2 615  ax-io 709  ax-5 1447  ax-7 1448  ax-gen 1449  ax-ie1 1493  ax-ie2 1494  ax-8 1504  ax-10 1505  ax-11 1506  ax-i12 1507  ax-bndl 1509  ax-4 1510  ax-17 1526  ax-i9 1530  ax-ial 1534  ax-i5r 1535  ax-13 2150  ax-14 2151  ax-ext 2159  ax-coll 4119  ax-sep 4122  ax-nul 4130  ax-pow 4175  ax-pr 4210  ax-un 4434  ax-setind 4537  ax-iinf 4588  ax-cnex 7902  ax-resscn 7903  ax-1cn 7904  ax-1re 7905  ax-icn 7906  ax-addcl 7907  ax-addrcl 7908  ax-mulcl 7909  ax-mulrcl 7910  ax-addcom 7911  ax-mulcom 7912  ax-addass 7913  ax-mulass 7914  ax-distr 7915  ax-i2m1 7916  ax-0lt1 7917  ax-1rid 7918  ax-0id 7919  ax-rnegex 7920  ax-precex 7921  ax-cnre 7922  ax-pre-ltirr 7923  ax-pre-ltwlin 7924  ax-pre-lttrn 7925  ax-pre-apti 7926  ax-pre-ltadd 7927  ax-pre-mulgt0 7928  ax-pre-mulext 7929  ax-arch 7930  ax-caucvg 7931
This theorem depends on definitions:  df-bi 117  df-dc 835  df-3or 979  df-3an 980  df-tru 1356  df-fal 1359  df-nf 1461  df-sb 1763  df-eu 2029  df-mo 2030  df-clab 2164  df-cleq 2170  df-clel 2173  df-nfc 2308  df-ne 2348  df-nel 2443  df-ral 2460  df-rex 2461  df-reu 2462  df-rmo 2463  df-rab 2464  df-v 2740  df-sbc 2964  df-csb 3059  df-dif 3132  df-un 3134  df-in 3136  df-ss 3143  df-nul 3424  df-if 3536  df-pw 3578  df-sn 3599  df-pr 3600  df-op 3602  df-uni 3811  df-int 3846  df-iun 3889  df-br 4005  df-opab 4066  df-mpt 4067  df-tr 4103  df-id 4294  df-po 4297  df-iso 4298  df-iord 4367  df-on 4369  df-ilim 4370  df-suc 4372  df-iom 4591  df-xp 4633  df-rel 4634  df-cnv 4635  df-co 4636  df-dm 4637  df-rn 4638  df-res 4639  df-ima 4640  df-iota 5179  df-fun 5219  df-fn 5220  df-f 5221  df-f1 5222  df-fo 5223  df-f1o 5224  df-fv 5225  df-isom 5226  df-riota 5831  df-ov 5878  df-oprab 5879  df-mpo 5880  df-1st 6141  df-2nd 6142  df-recs 6306  df-frec 6392  df-sup 6983  df-inf 6984  df-pnf 7994  df-mnf 7995  df-xr 7996  df-ltxr 7997  df-le 7998  df-sub 8130  df-neg 8131  df-reap 8532  df-ap 8539  df-div 8630  df-inn 8920  df-2 8978  df-3 8979  df-4 8980  df-n0 9177  df-z 9254  df-uz 9529  df-q 9620  df-rp 9654  df-fz 10009  df-fzo 10143  df-fl 10270  df-mod 10323  df-seqfrec 10446  df-exp 10520  df-cj 10851  df-re 10852  df-im 10853  df-rsqrt 11007  df-abs 11008  df-dvds 11795  df-gcd 11944  df-lcm 12061
This theorem is referenced by:  lcmid  12080  lcm1  12081  lcmgcdnn  12082
  Copyright terms: Public domain W3C validator