Users' Mathboxes Mathbox for Norm Megill < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  hdmaplkr Structured version   Visualization version   GIF version

Theorem hdmaplkr 40772
Description: Kernel of the vector to dual map. Line 16 in [Holland95] p. 14. TODO: eliminate 𝐹 hypothesis. (Contributed by NM, 9-Jun-2015.)
Hypotheses
Ref Expression
hdmaplkr.h 𝐻 = (LHypβ€˜πΎ)
hdmaplkr.o 𝑂 = ((ocHβ€˜πΎ)β€˜π‘Š)
hdmaplkr.u π‘ˆ = ((DVecHβ€˜πΎ)β€˜π‘Š)
hdmaplkr.v 𝑉 = (Baseβ€˜π‘ˆ)
hdmaplkr.f 𝐹 = (LFnlβ€˜π‘ˆ)
hdmaplkr.y π‘Œ = (LKerβ€˜π‘ˆ)
hdmaplkr.s 𝑆 = ((HDMapβ€˜πΎ)β€˜π‘Š)
hdmaplkr.k (πœ‘ β†’ (𝐾 ∈ HL ∧ π‘Š ∈ 𝐻))
hdmaplkr.x (πœ‘ β†’ 𝑋 ∈ 𝑉)
Assertion
Ref Expression
hdmaplkr (πœ‘ β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) = (π‘‚β€˜{𝑋}))

Proof of Theorem hdmaplkr
Dummy variable 𝑓 is distinct from all other variables.
StepHypRef Expression
1 fveq2 6888 . . . . 5 (𝑋 = (0gβ€˜π‘ˆ) β†’ (π‘†β€˜π‘‹) = (π‘†β€˜(0gβ€˜π‘ˆ)))
21fveq2d 6892 . . . 4 (𝑋 = (0gβ€˜π‘ˆ) β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) = (π‘Œβ€˜(π‘†β€˜(0gβ€˜π‘ˆ))))
3 sneq 4637 . . . . 5 (𝑋 = (0gβ€˜π‘ˆ) β†’ {𝑋} = {(0gβ€˜π‘ˆ)})
43fveq2d 6892 . . . 4 (𝑋 = (0gβ€˜π‘ˆ) β†’ (π‘‚β€˜{𝑋}) = (π‘‚β€˜{(0gβ€˜π‘ˆ)}))
52, 4sseq12d 4014 . . 3 (𝑋 = (0gβ€˜π‘ˆ) β†’ ((π‘Œβ€˜(π‘†β€˜π‘‹)) βŠ† (π‘‚β€˜{𝑋}) ↔ (π‘Œβ€˜(π‘†β€˜(0gβ€˜π‘ˆ))) βŠ† (π‘‚β€˜{(0gβ€˜π‘ˆ)})))
6 hdmaplkr.h . . . . . . . . . 10 𝐻 = (LHypβ€˜πΎ)
7 eqid 2732 . . . . . . . . . 10 ((LCDualβ€˜πΎ)β€˜π‘Š) = ((LCDualβ€˜πΎ)β€˜π‘Š)
8 hdmaplkr.k . . . . . . . . . 10 (πœ‘ β†’ (𝐾 ∈ HL ∧ π‘Š ∈ 𝐻))
96, 7, 8lcdlmod 40451 . . . . . . . . 9 (πœ‘ β†’ ((LCDualβ€˜πΎ)β€˜π‘Š) ∈ LMod)
10 hdmaplkr.u . . . . . . . . . 10 π‘ˆ = ((DVecHβ€˜πΎ)β€˜π‘Š)
11 hdmaplkr.v . . . . . . . . . 10 𝑉 = (Baseβ€˜π‘ˆ)
12 eqid 2732 . . . . . . . . . 10 (Baseβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) = (Baseβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))
13 hdmaplkr.s . . . . . . . . . 10 𝑆 = ((HDMapβ€˜πΎ)β€˜π‘Š)
14 hdmaplkr.x . . . . . . . . . 10 (πœ‘ β†’ 𝑋 ∈ 𝑉)
156, 10, 11, 7, 12, 13, 8, 14hdmapcl 40689 . . . . . . . . 9 (πœ‘ β†’ (π‘†β€˜π‘‹) ∈ (Baseβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)))
16 eqid 2732 . . . . . . . . . 10 (LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) = (LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))
1712, 16lspsnid 20596 . . . . . . . . 9 ((((LCDualβ€˜πΎ)β€˜π‘Š) ∈ LMod ∧ (π‘†β€˜π‘‹) ∈ (Baseβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))) β†’ (π‘†β€˜π‘‹) ∈ ((LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))β€˜{(π‘†β€˜π‘‹)}))
189, 15, 17syl2anc 584 . . . . . . . 8 (πœ‘ β†’ (π‘†β€˜π‘‹) ∈ ((LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))β€˜{(π‘†β€˜π‘‹)}))
19 eqid 2732 . . . . . . . . . 10 (LSpanβ€˜π‘ˆ) = (LSpanβ€˜π‘ˆ)
20 eqid 2732 . . . . . . . . . 10 ((mapdβ€˜πΎ)β€˜π‘Š) = ((mapdβ€˜πΎ)β€˜π‘Š)
216, 10, 11, 19, 7, 16, 20, 13, 8, 14hdmap10 40699 . . . . . . . . 9 (πœ‘ β†’ (((mapdβ€˜πΎ)β€˜π‘Š)β€˜((LSpanβ€˜π‘ˆ)β€˜{𝑋})) = ((LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))β€˜{(π‘†β€˜π‘‹)}))
22 hdmaplkr.o . . . . . . . . . 10 𝑂 = ((ocHβ€˜πΎ)β€˜π‘Š)
23 eqid 2732 . . . . . . . . . 10 (LFnlβ€˜π‘ˆ) = (LFnlβ€˜π‘ˆ)
24 hdmaplkr.y . . . . . . . . . 10 π‘Œ = (LKerβ€˜π‘ˆ)
256, 22, 20, 10, 11, 19, 23, 24, 8, 14mapdsn 40500 . . . . . . . . 9 (πœ‘ β†’ (((mapdβ€˜πΎ)β€˜π‘Š)β€˜((LSpanβ€˜π‘ˆ)β€˜{𝑋})) = {𝑓 ∈ (LFnlβ€˜π‘ˆ) ∣ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“)})
2621, 25eqtr3d 2774 . . . . . . . 8 (πœ‘ β†’ ((LSpanβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))β€˜{(π‘†β€˜π‘‹)}) = {𝑓 ∈ (LFnlβ€˜π‘ˆ) ∣ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“)})
2718, 26eleqtrd 2835 . . . . . . 7 (πœ‘ β†’ (π‘†β€˜π‘‹) ∈ {𝑓 ∈ (LFnlβ€˜π‘ˆ) ∣ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“)})
286, 7, 12, 10, 23, 8, 15lcdvbaselfl 40454 . . . . . . . 8 (πœ‘ β†’ (π‘†β€˜π‘‹) ∈ (LFnlβ€˜π‘ˆ))
29 fveq2 6888 . . . . . . . . . 10 (𝑓 = (π‘†β€˜π‘‹) β†’ (π‘Œβ€˜π‘“) = (π‘Œβ€˜(π‘†β€˜π‘‹)))
3029sseq2d 4013 . . . . . . . . 9 (𝑓 = (π‘†β€˜π‘‹) β†’ ((π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“) ↔ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹))))
3130elrab3 3683 . . . . . . . 8 ((π‘†β€˜π‘‹) ∈ (LFnlβ€˜π‘ˆ) β†’ ((π‘†β€˜π‘‹) ∈ {𝑓 ∈ (LFnlβ€˜π‘ˆ) ∣ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“)} ↔ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹))))
3228, 31syl 17 . . . . . . 7 (πœ‘ β†’ ((π‘†β€˜π‘‹) ∈ {𝑓 ∈ (LFnlβ€˜π‘ˆ) ∣ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜π‘“)} ↔ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹))))
3327, 32mpbid 231 . . . . . 6 (πœ‘ β†’ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹)))
3433adantr 481 . . . . 5 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹)))
35 eqid 2732 . . . . . 6 (LSHypβ€˜π‘ˆ) = (LSHypβ€˜π‘ˆ)
366, 10, 8dvhlvec 39968 . . . . . . 7 (πœ‘ β†’ π‘ˆ ∈ LVec)
3736adantr 481 . . . . . 6 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ π‘ˆ ∈ LVec)
38 eqid 2732 . . . . . . 7 (0gβ€˜π‘ˆ) = (0gβ€˜π‘ˆ)
398adantr 481 . . . . . . 7 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (𝐾 ∈ HL ∧ π‘Š ∈ 𝐻))
4014anim1i 615 . . . . . . . 8 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (𝑋 ∈ 𝑉 ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)))
41 eldifsn 4789 . . . . . . . 8 (𝑋 ∈ (𝑉 βˆ– {(0gβ€˜π‘ˆ)}) ↔ (𝑋 ∈ 𝑉 ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)))
4240, 41sylibr 233 . . . . . . 7 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ 𝑋 ∈ (𝑉 βˆ– {(0gβ€˜π‘ˆ)}))
436, 22, 10, 11, 38, 35, 39, 42dochsnshp 40312 . . . . . 6 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘‚β€˜{𝑋}) ∈ (LSHypβ€˜π‘ˆ))
4428adantr 481 . . . . . . 7 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘†β€˜π‘‹) ∈ (LFnlβ€˜π‘ˆ))
45 eqid 2732 . . . . . . . . . . . 12 (Scalarβ€˜π‘ˆ) = (Scalarβ€˜π‘ˆ)
46 eqid 2732 . . . . . . . . . . . 12 (0gβ€˜(Scalarβ€˜π‘ˆ)) = (0gβ€˜(Scalarβ€˜π‘ˆ))
47 eqid 2732 . . . . . . . . . . . 12 (0gβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) = (0gβ€˜((LCDualβ€˜πΎ)β€˜π‘Š))
486, 10, 11, 45, 46, 7, 47, 8lcd0v 40470 . . . . . . . . . . 11 (πœ‘ β†’ (0gβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) = (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))}))
4948eqeq2d 2743 . . . . . . . . . 10 (πœ‘ β†’ ((π‘†β€˜π‘‹) = (0gβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) ↔ (π‘†β€˜π‘‹) = (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))})))
506, 10, 11, 38, 7, 47, 13, 8, 14hdmapeq0 40703 . . . . . . . . . 10 (πœ‘ β†’ ((π‘†β€˜π‘‹) = (0gβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)) ↔ 𝑋 = (0gβ€˜π‘ˆ)))
5149, 50bitr3d 280 . . . . . . . . 9 (πœ‘ β†’ ((π‘†β€˜π‘‹) = (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))}) ↔ 𝑋 = (0gβ€˜π‘ˆ)))
5251necon3bid 2985 . . . . . . . 8 (πœ‘ β†’ ((π‘†β€˜π‘‹) β‰  (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))}) ↔ 𝑋 β‰  (0gβ€˜π‘ˆ)))
5352biimpar 478 . . . . . . 7 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘†β€˜π‘‹) β‰  (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))}))
5411, 45, 46, 35, 23, 24lkrshp 37963 . . . . . . 7 ((π‘ˆ ∈ LVec ∧ (π‘†β€˜π‘‹) ∈ (LFnlβ€˜π‘ˆ) ∧ (π‘†β€˜π‘‹) β‰  (𝑉 Γ— {(0gβ€˜(Scalarβ€˜π‘ˆ))})) β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) ∈ (LSHypβ€˜π‘ˆ))
5537, 44, 53, 54syl3anc 1371 . . . . . 6 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) ∈ (LSHypβ€˜π‘ˆ))
5635, 37, 43, 55lshpcmp 37846 . . . . 5 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ ((π‘‚β€˜{𝑋}) βŠ† (π‘Œβ€˜(π‘†β€˜π‘‹)) ↔ (π‘‚β€˜{𝑋}) = (π‘Œβ€˜(π‘†β€˜π‘‹))))
5734, 56mpbid 231 . . . 4 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘‚β€˜{𝑋}) = (π‘Œβ€˜(π‘†β€˜π‘‹)))
58 eqimss2 4040 . . . 4 ((π‘‚β€˜{𝑋}) = (π‘Œβ€˜(π‘†β€˜π‘‹)) β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) βŠ† (π‘‚β€˜{𝑋}))
5957, 58syl 17 . . 3 ((πœ‘ ∧ 𝑋 β‰  (0gβ€˜π‘ˆ)) β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) βŠ† (π‘‚β€˜{𝑋}))
606, 10, 8dvhlmod 39969 . . . . 5 (πœ‘ β†’ π‘ˆ ∈ LMod)
6111, 38lmod0vcl 20493 . . . . . . . 8 (π‘ˆ ∈ LMod β†’ (0gβ€˜π‘ˆ) ∈ 𝑉)
6260, 61syl 17 . . . . . . 7 (πœ‘ β†’ (0gβ€˜π‘ˆ) ∈ 𝑉)
636, 10, 11, 7, 12, 13, 8, 62hdmapcl 40689 . . . . . 6 (πœ‘ β†’ (π‘†β€˜(0gβ€˜π‘ˆ)) ∈ (Baseβ€˜((LCDualβ€˜πΎ)β€˜π‘Š)))
646, 7, 12, 10, 23, 8, 63lcdvbaselfl 40454 . . . . 5 (πœ‘ β†’ (π‘†β€˜(0gβ€˜π‘ˆ)) ∈ (LFnlβ€˜π‘ˆ))
6511, 23, 24, 60, 64lkrssv 37954 . . . 4 (πœ‘ β†’ (π‘Œβ€˜(π‘†β€˜(0gβ€˜π‘ˆ))) βŠ† 𝑉)
666, 10, 22, 11, 38doch0 40217 . . . . 5 ((𝐾 ∈ HL ∧ π‘Š ∈ 𝐻) β†’ (π‘‚β€˜{(0gβ€˜π‘ˆ)}) = 𝑉)
678, 66syl 17 . . . 4 (πœ‘ β†’ (π‘‚β€˜{(0gβ€˜π‘ˆ)}) = 𝑉)
6865, 67sseqtrrd 4022 . . 3 (πœ‘ β†’ (π‘Œβ€˜(π‘†β€˜(0gβ€˜π‘ˆ))) βŠ† (π‘‚β€˜{(0gβ€˜π‘ˆ)}))
695, 59, 68pm2.61ne 3027 . 2 (πœ‘ β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) βŠ† (π‘‚β€˜{𝑋}))
7069, 33eqssd 3998 1 (πœ‘ β†’ (π‘Œβ€˜(π‘†β€˜π‘‹)) = (π‘‚β€˜{𝑋}))
Colors of variables: wff setvar class
Syntax hints:   β†’ wi 4   ↔ wb 205   ∧ wa 396   = wceq 1541   ∈ wcel 2106   β‰  wne 2940  {crab 3432   βˆ– cdif 3944   βŠ† wss 3947  {csn 4627   Γ— cxp 5673  β€˜cfv 6540  Basecbs 17140  Scalarcsca 17196  0gc0g 17381  LModclmod 20463  LSpanclspn 20574  LVecclvec 20705  LSHypclsh 37833  LFnlclfn 37915  LKerclk 37943  HLchlt 38208  LHypclh 38843  DVecHcdvh 39937  ocHcoch 40206  LCDualclcd 40445  mapdcmpd 40483  HDMapchdma 40651
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1797  ax-4 1811  ax-5 1913  ax-6 1971  ax-7 2011  ax-8 2108  ax-9 2116  ax-10 2137  ax-11 2154  ax-12 2171  ax-ext 2703  ax-rep 5284  ax-sep 5298  ax-nul 5305  ax-pow 5362  ax-pr 5426  ax-un 7721  ax-cnex 11162  ax-resscn 11163  ax-1cn 11164  ax-icn 11165  ax-addcl 11166  ax-addrcl 11167  ax-mulcl 11168  ax-mulrcl 11169  ax-mulcom 11170  ax-addass 11171  ax-mulass 11172  ax-distr 11173  ax-i2m1 11174  ax-1ne0 11175  ax-1rid 11176  ax-rnegex 11177  ax-rrecex 11178  ax-cnre 11179  ax-pre-lttri 11180  ax-pre-lttrn 11181  ax-pre-ltadd 11182  ax-pre-mulgt0 11183  ax-riotaBAD 37811
This theorem depends on definitions:  df-bi 206  df-an 397  df-or 846  df-3or 1088  df-3an 1089  df-tru 1544  df-fal 1554  df-ex 1782  df-nf 1786  df-sb 2068  df-mo 2534  df-eu 2563  df-clab 2710  df-cleq 2724  df-clel 2810  df-nfc 2885  df-ne 2941  df-nel 3047  df-ral 3062  df-rex 3071  df-rmo 3376  df-reu 3377  df-rab 3433  df-v 3476  df-sbc 3777  df-csb 3893  df-dif 3950  df-un 3952  df-in 3954  df-ss 3964  df-pss 3966  df-nul 4322  df-if 4528  df-pw 4603  df-sn 4628  df-pr 4630  df-tp 4632  df-op 4634  df-ot 4636  df-uni 4908  df-int 4950  df-iun 4998  df-iin 4999  df-br 5148  df-opab 5210  df-mpt 5231  df-tr 5265  df-id 5573  df-eprel 5579  df-po 5587  df-so 5588  df-fr 5630  df-we 5632  df-xp 5681  df-rel 5682  df-cnv 5683  df-co 5684  df-dm 5685  df-rn 5686  df-res 5687  df-ima 5688  df-pred 6297  df-ord 6364  df-on 6365  df-lim 6366  df-suc 6367  df-iota 6492  df-fun 6542  df-fn 6543  df-f 6544  df-f1 6545  df-fo 6546  df-f1o 6547  df-fv 6548  df-riota 7361  df-ov 7408  df-oprab 7409  df-mpo 7410  df-of 7666  df-om 7852  df-1st 7971  df-2nd 7972  df-tpos 8207  df-undef 8254  df-frecs 8262  df-wrecs 8293  df-recs 8367  df-rdg 8406  df-1o 8462  df-er 8699  df-map 8818  df-en 8936  df-dom 8937  df-sdom 8938  df-fin 8939  df-pnf 11246  df-mnf 11247  df-xr 11248  df-ltxr 11249  df-le 11250  df-sub 11442  df-neg 11443  df-nn 12209  df-2 12271  df-3 12272  df-4 12273  df-5 12274  df-6 12275  df-n0 12469  df-z 12555  df-uz 12819  df-fz 13481  df-struct 17076  df-sets 17093  df-slot 17111  df-ndx 17123  df-base 17141  df-ress 17170  df-plusg 17206  df-mulr 17207  df-sca 17209  df-vsca 17210  df-0g 17383  df-mre 17526  df-mrc 17527  df-acs 17529  df-proset 18244  df-poset 18262  df-plt 18279  df-lub 18295  df-glb 18296  df-join 18297  df-meet 18298  df-p0 18374  df-p1 18375  df-lat 18381  df-clat 18448  df-mgm 18557  df-sgrp 18606  df-mnd 18622  df-submnd 18668  df-grp 18818  df-minusg 18819  df-sbg 18820  df-subg 18997  df-cntz 19175  df-oppg 19204  df-lsm 19498  df-cmn 19644  df-abl 19645  df-mgp 19982  df-ur 19999  df-ring 20051  df-oppr 20142  df-dvdsr 20163  df-unit 20164  df-invr 20194  df-dvr 20207  df-drng 20309  df-lmod 20465  df-lss 20535  df-lsp 20575  df-lvec 20706  df-lsatoms 37834  df-lshyp 37835  df-lcv 37877  df-lfl 37916  df-lkr 37944  df-ldual 37982  df-oposet 38034  df-ol 38036  df-oml 38037  df-covers 38124  df-ats 38125  df-atl 38156  df-cvlat 38180  df-hlat 38209  df-llines 38357  df-lplanes 38358  df-lvols 38359  df-lines 38360  df-psubsp 38362  df-pmap 38363  df-padd 38655  df-lhyp 38847  df-laut 38848  df-ldil 38963  df-ltrn 38964  df-trl 39018  df-tgrp 39602  df-tendo 39614  df-edring 39616  df-dveca 39862  df-disoa 39888  df-dvech 39938  df-dib 39998  df-dic 40032  df-dih 40088  df-doch 40207  df-djh 40254  df-lcdual 40446  df-mapd 40484  df-hvmap 40616  df-hdmap1 40652  df-hdmap 40653
This theorem is referenced by:  hdmapellkr  40773  hdmapip0  40774  hdmapinvlem1  40777
  Copyright terms: Public domain W3C validator