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

Theorem hdmapinvlem4 39591
Description: Part 1.1 of Proposition 1 of [Baer] p. 110. We use 𝐶, 𝐷, 𝐼, and 𝐽 for Baer's u, v, s, and t. Our unit vector 𝐸 has the required properties for his w by hdmapevec2 39506. Our ((𝑆𝐷)‘𝐶) means his f(u,v) (note argument reversal). (Contributed by NM, 12-Jun-2015.)
Hypotheses
Ref Expression
hdmapinvlem3.h 𝐻 = (LHyp‘𝐾)
hdmapinvlem3.e 𝐸 = ⟨( I ↾ (Base‘𝐾)), ( I ↾ ((LTrn‘𝐾)‘𝑊))⟩
hdmapinvlem3.o 𝑂 = ((ocH‘𝐾)‘𝑊)
hdmapinvlem3.u 𝑈 = ((DVecH‘𝐾)‘𝑊)
hdmapinvlem3.v 𝑉 = (Base‘𝑈)
hdmapinvlem3.p + = (+g𝑈)
hdmapinvlem3.m = (-g𝑈)
hdmapinvlem3.q · = ( ·𝑠𝑈)
hdmapinvlem3.r 𝑅 = (Scalar‘𝑈)
hdmapinvlem3.b 𝐵 = (Base‘𝑅)
hdmapinvlem3.t × = (.r𝑅)
hdmapinvlem3.z 0 = (0g𝑅)
hdmapinvlem3.s 𝑆 = ((HDMap‘𝐾)‘𝑊)
hdmapinvlem3.g 𝐺 = ((HGMap‘𝐾)‘𝑊)
hdmapinvlem3.k (𝜑 → (𝐾 ∈ HL ∧ 𝑊𝐻))
hdmapinvlem3.c (𝜑𝐶 ∈ (𝑂‘{𝐸}))
hdmapinvlem3.d (𝜑𝐷 ∈ (𝑂‘{𝐸}))
hdmapinvlem3.i (𝜑𝐼𝐵)
hdmapinvlem3.j (𝜑𝐽𝐵)
hdmapinvlem3.ij (𝜑 → (𝐼 × (𝐺𝐽)) = ((𝑆𝐷)‘𝐶))
Assertion
Ref Expression
hdmapinvlem4 (𝜑 → (𝐽 × (𝐺𝐼)) = ((𝑆𝐶)‘𝐷))

Proof of Theorem hdmapinvlem4
StepHypRef Expression
1 hdmapinvlem3.h . . . 4 𝐻 = (LHyp‘𝐾)
2 hdmapinvlem3.u . . . 4 𝑈 = ((DVecH‘𝐾)‘𝑊)
3 hdmapinvlem3.v . . . 4 𝑉 = (Base‘𝑈)
4 hdmapinvlem3.m . . . 4 = (-g𝑈)
5 hdmapinvlem3.r . . . 4 𝑅 = (Scalar‘𝑈)
6 eqid 2739 . . . 4 (-g𝑅) = (-g𝑅)
7 hdmapinvlem3.s . . . 4 𝑆 = ((HDMap‘𝐾)‘𝑊)
8 hdmapinvlem3.k . . . 4 (𝜑 → (𝐾 ∈ HL ∧ 𝑊𝐻))
91, 2, 8dvhlmod 38780 . . . . 5 (𝜑𝑈 ∈ LMod)
10 hdmapinvlem3.j . . . . 5 (𝜑𝐽𝐵)
11 eqid 2739 . . . . . . 7 (Base‘𝐾) = (Base‘𝐾)
12 eqid 2739 . . . . . . 7 ((LTrn‘𝐾)‘𝑊) = ((LTrn‘𝐾)‘𝑊)
13 eqid 2739 . . . . . . 7 (0g𝑈) = (0g𝑈)
14 hdmapinvlem3.e . . . . . . 7 𝐸 = ⟨( I ↾ (Base‘𝐾)), ( I ↾ ((LTrn‘𝐾)‘𝑊))⟩
151, 11, 12, 2, 3, 13, 14, 8dvheveccl 38782 . . . . . 6 (𝜑𝐸 ∈ (𝑉 ∖ {(0g𝑈)}))
1615eldifad 3865 . . . . 5 (𝜑𝐸𝑉)
17 hdmapinvlem3.q . . . . . 6 · = ( ·𝑠𝑈)
18 hdmapinvlem3.b . . . . . 6 𝐵 = (Base‘𝑅)
193, 5, 17, 18lmodvscl 19783 . . . . 5 ((𝑈 ∈ LMod ∧ 𝐽𝐵𝐸𝑉) → (𝐽 · 𝐸) ∈ 𝑉)
209, 10, 16, 19syl3anc 1372 . . . 4 (𝜑 → (𝐽 · 𝐸) ∈ 𝑉)
2116snssd 4707 . . . . . 6 (𝜑 → {𝐸} ⊆ 𝑉)
22 hdmapinvlem3.o . . . . . . 7 𝑂 = ((ocH‘𝐾)‘𝑊)
231, 2, 3, 22dochssv 39025 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ {𝐸} ⊆ 𝑉) → (𝑂‘{𝐸}) ⊆ 𝑉)
248, 21, 23syl2anc 587 . . . . 5 (𝜑 → (𝑂‘{𝐸}) ⊆ 𝑉)
25 hdmapinvlem3.d . . . . 5 (𝜑𝐷 ∈ (𝑂‘{𝐸}))
2624, 25sseldd 3888 . . . 4 (𝜑𝐷𝑉)
27 hdmapinvlem3.i . . . . . 6 (𝜑𝐼𝐵)
283, 5, 17, 18lmodvscl 19783 . . . . . 6 ((𝑈 ∈ LMod ∧ 𝐼𝐵𝐸𝑉) → (𝐼 · 𝐸) ∈ 𝑉)
299, 27, 16, 28syl3anc 1372 . . . . 5 (𝜑 → (𝐼 · 𝐸) ∈ 𝑉)
30 hdmapinvlem3.c . . . . . 6 (𝜑𝐶 ∈ (𝑂‘{𝐸}))
3124, 30sseldd 3888 . . . . 5 (𝜑𝐶𝑉)
32 hdmapinvlem3.p . . . . . 6 + = (+g𝑈)
333, 32lmodvacl 19780 . . . . 5 ((𝑈 ∈ LMod ∧ (𝐼 · 𝐸) ∈ 𝑉𝐶𝑉) → ((𝐼 · 𝐸) + 𝐶) ∈ 𝑉)
349, 29, 31, 33syl3anc 1372 . . . 4 (𝜑 → ((𝐼 · 𝐸) + 𝐶) ∈ 𝑉)
351, 2, 3, 4, 5, 6, 7, 8, 20, 26, 34hdmaplns1 39578 . . 3 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘((𝐽 · 𝐸) 𝐷)) = (((𝑆‘((𝐼 · 𝐸) + 𝐶))‘(𝐽 · 𝐸))(-g𝑅)((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐷)))
36 hdmapinvlem3.t . . . . 5 × = (.r𝑅)
37 hdmapinvlem3.z . . . . 5 0 = (0g𝑅)
38 hdmapinvlem3.g . . . . 5 𝐺 = ((HGMap‘𝐾)‘𝑊)
39 hdmapinvlem3.ij . . . . 5 (𝜑 → (𝐼 × (𝐺𝐽)) = ((𝑆𝐷)‘𝐶))
401, 14, 22, 2, 3, 32, 4, 17, 5, 18, 36, 37, 7, 38, 8, 30, 25, 27, 10, 39hdmapinvlem3 39590 . . . 4 (𝜑 → ((𝑆‘((𝐽 · 𝐸) 𝐷))‘((𝐼 · 𝐸) + 𝐶)) = 0 )
413, 4lmodvsubcl 19811 . . . . . 6 ((𝑈 ∈ LMod ∧ (𝐽 · 𝐸) ∈ 𝑉𝐷𝑉) → ((𝐽 · 𝐸) 𝐷) ∈ 𝑉)
429, 20, 26, 41syl3anc 1372 . . . . 5 (𝜑 → ((𝐽 · 𝐸) 𝐷) ∈ 𝑉)
431, 2, 3, 5, 37, 7, 8, 42, 34hdmapip0com 39587 . . . 4 (𝜑 → (((𝑆‘((𝐽 · 𝐸) 𝐷))‘((𝐼 · 𝐸) + 𝐶)) = 0 ↔ ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘((𝐽 · 𝐸) 𝐷)) = 0 ))
4440, 43mpbid 235 . . 3 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘((𝐽 · 𝐸) 𝐷)) = 0 )
451, 2, 3, 17, 5, 18, 36, 7, 8, 16, 34, 10hdmaplnm1 39579 . . . . 5 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘(𝐽 · 𝐸)) = (𝐽 × ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐸)))
46 eqid 2739 . . . . . . . 8 (+g𝑅) = (+g𝑅)
471, 2, 3, 32, 5, 46, 7, 8, 16, 29, 31hdmaplna2 39580 . . . . . . 7 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐸) = (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅)((𝑆𝐶)‘𝐸)))
481, 14, 22, 2, 3, 5, 18, 36, 37, 7, 8, 30hdmapinvlem2 39589 . . . . . . . 8 (𝜑 → ((𝑆𝐶)‘𝐸) = 0 )
4948oveq2d 7199 . . . . . . 7 (𝜑 → (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅)((𝑆𝐶)‘𝐸)) = (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅) 0 ))
505lmodring 19774 . . . . . . . . . . 11 (𝑈 ∈ LMod → 𝑅 ∈ Ring)
519, 50syl 17 . . . . . . . . . 10 (𝜑𝑅 ∈ Ring)
52 ringgrp 19434 . . . . . . . . . 10 (𝑅 ∈ Ring → 𝑅 ∈ Grp)
5351, 52syl 17 . . . . . . . . 9 (𝜑𝑅 ∈ Grp)
541, 2, 3, 5, 18, 7, 8, 16, 29hdmapipcl 39575 . . . . . . . . 9 (𝜑 → ((𝑆‘(𝐼 · 𝐸))‘𝐸) ∈ 𝐵)
5518, 46, 37grprid 18265 . . . . . . . . 9 ((𝑅 ∈ Grp ∧ ((𝑆‘(𝐼 · 𝐸))‘𝐸) ∈ 𝐵) → (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅) 0 ) = ((𝑆‘(𝐼 · 𝐸))‘𝐸))
5653, 54, 55syl2anc 587 . . . . . . . 8 (𝜑 → (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅) 0 ) = ((𝑆‘(𝐼 · 𝐸))‘𝐸))
571, 2, 3, 17, 5, 18, 36, 7, 38, 8, 16, 16, 27hdmapglnm2 39581 . . . . . . . 8 (𝜑 → ((𝑆‘(𝐼 · 𝐸))‘𝐸) = (((𝑆𝐸)‘𝐸) × (𝐺𝐼)))
58 eqid 2739 . . . . . . . . . . 11 ((HVMap‘𝐾)‘𝑊) = ((HVMap‘𝐾)‘𝑊)
59 eqid 2739 . . . . . . . . . . 11 (1r𝑅) = (1r𝑅)
601, 14, 58, 7, 8, 2, 5, 59hdmapevec2 39506 . . . . . . . . . 10 (𝜑 → ((𝑆𝐸)‘𝐸) = (1r𝑅))
6160oveq1d 7198 . . . . . . . . 9 (𝜑 → (((𝑆𝐸)‘𝐸) × (𝐺𝐼)) = ((1r𝑅) × (𝐺𝐼)))
621, 2, 5, 18, 38, 8, 27hgmapcl 39559 . . . . . . . . . 10 (𝜑 → (𝐺𝐼) ∈ 𝐵)
6318, 36, 59ringlidm 19456 . . . . . . . . . 10 ((𝑅 ∈ Ring ∧ (𝐺𝐼) ∈ 𝐵) → ((1r𝑅) × (𝐺𝐼)) = (𝐺𝐼))
6451, 62, 63syl2anc 587 . . . . . . . . 9 (𝜑 → ((1r𝑅) × (𝐺𝐼)) = (𝐺𝐼))
6561, 64eqtrd 2774 . . . . . . . 8 (𝜑 → (((𝑆𝐸)‘𝐸) × (𝐺𝐼)) = (𝐺𝐼))
6656, 57, 653eqtrd 2778 . . . . . . 7 (𝜑 → (((𝑆‘(𝐼 · 𝐸))‘𝐸)(+g𝑅) 0 ) = (𝐺𝐼))
6747, 49, 663eqtrd 2778 . . . . . 6 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐸) = (𝐺𝐼))
6867oveq2d 7199 . . . . 5 (𝜑 → (𝐽 × ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐸)) = (𝐽 × (𝐺𝐼)))
6945, 68eqtrd 2774 . . . 4 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘(𝐽 · 𝐸)) = (𝐽 × (𝐺𝐼)))
701, 2, 3, 32, 5, 46, 7, 8, 26, 29, 31hdmaplna2 39580 . . . . 5 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐷) = (((𝑆‘(𝐼 · 𝐸))‘𝐷)(+g𝑅)((𝑆𝐶)‘𝐷)))
711, 2, 3, 17, 5, 18, 36, 7, 38, 8, 26, 16, 27hdmapglnm2 39581 . . . . . . 7 (𝜑 → ((𝑆‘(𝐼 · 𝐸))‘𝐷) = (((𝑆𝐸)‘𝐷) × (𝐺𝐼)))
721, 14, 22, 2, 3, 5, 18, 36, 37, 7, 8, 25hdmapinvlem1 39588 . . . . . . . 8 (𝜑 → ((𝑆𝐸)‘𝐷) = 0 )
7372oveq1d 7198 . . . . . . 7 (𝜑 → (((𝑆𝐸)‘𝐷) × (𝐺𝐼)) = ( 0 × (𝐺𝐼)))
7418, 36, 37ringlz 19472 . . . . . . . 8 ((𝑅 ∈ Ring ∧ (𝐺𝐼) ∈ 𝐵) → ( 0 × (𝐺𝐼)) = 0 )
7551, 62, 74syl2anc 587 . . . . . . 7 (𝜑 → ( 0 × (𝐺𝐼)) = 0 )
7671, 73, 753eqtrd 2778 . . . . . 6 (𝜑 → ((𝑆‘(𝐼 · 𝐸))‘𝐷) = 0 )
7776oveq1d 7198 . . . . 5 (𝜑 → (((𝑆‘(𝐼 · 𝐸))‘𝐷)(+g𝑅)((𝑆𝐶)‘𝐷)) = ( 0 (+g𝑅)((𝑆𝐶)‘𝐷)))
781, 2, 3, 5, 18, 7, 8, 26, 31hdmapipcl 39575 . . . . . 6 (𝜑 → ((𝑆𝐶)‘𝐷) ∈ 𝐵)
7918, 46, 37grplid 18264 . . . . . 6 ((𝑅 ∈ Grp ∧ ((𝑆𝐶)‘𝐷) ∈ 𝐵) → ( 0 (+g𝑅)((𝑆𝐶)‘𝐷)) = ((𝑆𝐶)‘𝐷))
8053, 78, 79syl2anc 587 . . . . 5 (𝜑 → ( 0 (+g𝑅)((𝑆𝐶)‘𝐷)) = ((𝑆𝐶)‘𝐷))
8170, 77, 803eqtrd 2778 . . . 4 (𝜑 → ((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐷) = ((𝑆𝐶)‘𝐷))
8269, 81oveq12d 7201 . . 3 (𝜑 → (((𝑆‘((𝐼 · 𝐸) + 𝐶))‘(𝐽 · 𝐸))(-g𝑅)((𝑆‘((𝐼 · 𝐸) + 𝐶))‘𝐷)) = ((𝐽 × (𝐺𝐼))(-g𝑅)((𝑆𝐶)‘𝐷)))
8335, 44, 823eqtr3rd 2783 . 2 (𝜑 → ((𝐽 × (𝐺𝐼))(-g𝑅)((𝑆𝐶)‘𝐷)) = 0 )
845, 18, 36lmodmcl 19778 . . . 4 ((𝑈 ∈ LMod ∧ 𝐽𝐵 ∧ (𝐺𝐼) ∈ 𝐵) → (𝐽 × (𝐺𝐼)) ∈ 𝐵)
859, 10, 62, 84syl3anc 1372 . . 3 (𝜑 → (𝐽 × (𝐺𝐼)) ∈ 𝐵)
8618, 37, 6grpsubeq0 18316 . . 3 ((𝑅 ∈ Grp ∧ (𝐽 × (𝐺𝐼)) ∈ 𝐵 ∧ ((𝑆𝐶)‘𝐷) ∈ 𝐵) → (((𝐽 × (𝐺𝐼))(-g𝑅)((𝑆𝐶)‘𝐷)) = 0 ↔ (𝐽 × (𝐺𝐼)) = ((𝑆𝐶)‘𝐷)))
8753, 85, 78, 86syl3anc 1372 . 2 (𝜑 → (((𝐽 × (𝐺𝐼))(-g𝑅)((𝑆𝐶)‘𝐷)) = 0 ↔ (𝐽 × (𝐺𝐼)) = ((𝑆𝐶)‘𝐷)))
8883, 87mpbid 235 1 (𝜑 → (𝐽 × (𝐺𝐼)) = ((𝑆𝐶)‘𝐷))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 209  wa 399   = wceq 1542  wcel 2114  wss 3853  {csn 4526  cop 4532   I cid 5438  cres 5537  cfv 6350  (class class class)co 7183  Basecbs 16599  +gcplusg 16681  .rcmulr 16682  Scalarcsca 16684   ·𝑠 cvsca 16685  0gc0g 16829  Grpcgrp 18232  -gcsg 18234  1rcur 19383  Ringcrg 19429  LModclmod 19766  HLchlt 37020  LHypclh 37654  LTrncltrn 37771  DVecHcdvh 38748  ocHcoch 39017  HVMapchvm 39426  HDMapchdma 39462  HGMapchg 39553
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1802  ax-4 1816  ax-5 1917  ax-6 1975  ax-7 2020  ax-8 2116  ax-9 2124  ax-10 2145  ax-11 2162  ax-12 2179  ax-ext 2711  ax-rep 5164  ax-sep 5177  ax-nul 5184  ax-pow 5242  ax-pr 5306  ax-un 7492  ax-cnex 10684  ax-resscn 10685  ax-1cn 10686  ax-icn 10687  ax-addcl 10688  ax-addrcl 10689  ax-mulcl 10690  ax-mulrcl 10691  ax-mulcom 10692  ax-addass 10693  ax-mulass 10694  ax-distr 10695  ax-i2m1 10696  ax-1ne0 10697  ax-1rid 10698  ax-rnegex 10699  ax-rrecex 10700  ax-cnre 10701  ax-pre-lttri 10702  ax-pre-lttrn 10703  ax-pre-ltadd 10704  ax-pre-mulgt0 10705  ax-riotaBAD 36623
This theorem depends on definitions:  df-bi 210  df-an 400  df-or 847  df-3or 1089  df-3an 1090  df-tru 1545  df-fal 1555  df-ex 1787  df-nf 1791  df-sb 2075  df-mo 2541  df-eu 2571  df-clab 2718  df-cleq 2731  df-clel 2812  df-nfc 2882  df-ne 2936  df-nel 3040  df-ral 3059  df-rex 3060  df-reu 3061  df-rmo 3062  df-rab 3063  df-v 3402  df-sbc 3686  df-csb 3801  df-dif 3856  df-un 3858  df-in 3860  df-ss 3870  df-pss 3872  df-nul 4222  df-if 4425  df-pw 4500  df-sn 4527  df-pr 4529  df-tp 4531  df-op 4533  df-ot 4535  df-uni 4807  df-int 4847  df-iun 4893  df-iin 4894  df-br 5041  df-opab 5103  df-mpt 5121  df-tr 5147  df-id 5439  df-eprel 5444  df-po 5452  df-so 5453  df-fr 5493  df-we 5495  df-xp 5541  df-rel 5542  df-cnv 5543  df-co 5544  df-dm 5545  df-rn 5546  df-res 5547  df-ima 5548  df-pred 6139  df-ord 6186  df-on 6187  df-lim 6188  df-suc 6189  df-iota 6308  df-fun 6352  df-fn 6353  df-f 6354  df-f1 6355  df-fo 6356  df-f1o 6357  df-fv 6358  df-riota 7140  df-ov 7186  df-oprab 7187  df-mpo 7188  df-of 7438  df-om 7613  df-1st 7727  df-2nd 7728  df-tpos 7934  df-undef 7981  df-wrecs 7989  df-recs 8050  df-rdg 8088  df-1o 8144  df-er 8333  df-map 8452  df-en 8569  df-dom 8570  df-sdom 8571  df-fin 8572  df-pnf 10768  df-mnf 10769  df-xr 10770  df-ltxr 10771  df-le 10772  df-sub 10963  df-neg 10964  df-nn 11730  df-2 11792  df-3 11793  df-4 11794  df-5 11795  df-6 11796  df-n0 11990  df-z 12076  df-uz 12338  df-fz 12995  df-struct 16601  df-ndx 16602  df-slot 16603  df-base 16605  df-sets 16606  df-ress 16607  df-plusg 16694  df-mulr 16695  df-sca 16697  df-vsca 16698  df-0g 16831  df-mre 16973  df-mrc 16974  df-acs 16976  df-proset 17667  df-poset 17685  df-plt 17697  df-lub 17713  df-glb 17714  df-join 17715  df-meet 17716  df-p0 17778  df-p1 17779  df-lat 17785  df-clat 17847  df-mgm 17981  df-sgrp 18030  df-mnd 18041  df-submnd 18086  df-grp 18235  df-minusg 18236  df-sbg 18237  df-subg 18407  df-cntz 18578  df-oppg 18605  df-lsm 18892  df-cmn 19039  df-abl 19040  df-mgp 19372  df-ur 19384  df-ring 19431  df-oppr 19508  df-dvdsr 19526  df-unit 19527  df-invr 19557  df-dvr 19568  df-drng 19636  df-lmod 19768  df-lss 19836  df-lsp 19876  df-lvec 20007  df-lsatoms 36646  df-lshyp 36647  df-lcv 36689  df-lfl 36728  df-lkr 36756  df-ldual 36794  df-oposet 36846  df-ol 36848  df-oml 36849  df-covers 36936  df-ats 36937  df-atl 36968  df-cvlat 36992  df-hlat 37021  df-llines 37168  df-lplanes 37169  df-lvols 37170  df-lines 37171  df-psubsp 37173  df-pmap 37174  df-padd 37466  df-lhyp 37658  df-laut 37659  df-ldil 37774  df-ltrn 37775  df-trl 37829  df-tgrp 38413  df-tendo 38425  df-edring 38427  df-dveca 38673  df-disoa 38699  df-dvech 38749  df-dib 38809  df-dic 38843  df-dih 38899  df-doch 39018  df-djh 39065  df-lcdual 39257  df-mapd 39295  df-hvmap 39427  df-hdmap1 39463  df-hdmap 39464  df-hgmap 39554
This theorem is referenced by:  hdmapglem5  39592  hgmapvvlem1  39593
  Copyright terms: Public domain W3C validator