MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  xpsmul Structured version   Visualization version   GIF version

Theorem xpsmul 17517
Description: Value of the multiplication operation in a binary structure product. (Contributed by Mario Carneiro, 15-Aug-2015.)
Hypotheses
Ref Expression
xpsval.t 𝑇 = (𝑅 Γ—s 𝑆)
xpsval.x 𝑋 = (Baseβ€˜π‘…)
xpsval.y π‘Œ = (Baseβ€˜π‘†)
xpsval.1 (πœ‘ β†’ 𝑅 ∈ 𝑉)
xpsval.2 (πœ‘ β†’ 𝑆 ∈ π‘Š)
xpsadd.3 (πœ‘ β†’ 𝐴 ∈ 𝑋)
xpsadd.4 (πœ‘ β†’ 𝐡 ∈ π‘Œ)
xpsadd.5 (πœ‘ β†’ 𝐢 ∈ 𝑋)
xpsadd.6 (πœ‘ β†’ 𝐷 ∈ π‘Œ)
xpsadd.7 (πœ‘ β†’ (𝐴 Β· 𝐢) ∈ 𝑋)
xpsadd.8 (πœ‘ β†’ (𝐡 Γ— 𝐷) ∈ π‘Œ)
xpsmul.m Β· = (.rβ€˜π‘…)
xpsmul.n Γ— = (.rβ€˜π‘†)
xpsmul.p βˆ™ = (.rβ€˜π‘‡)
Assertion
Ref Expression
xpsmul (πœ‘ β†’ (⟨𝐴, 𝐡⟩ βˆ™ ⟨𝐢, 𝐷⟩) = ⟨(𝐴 Β· 𝐢), (𝐡 Γ— 𝐷)⟩)

Proof of Theorem xpsmul
Dummy variables 𝑦 π‘˜ 𝑐 π‘₯ 𝑑 π‘Ž 𝑏 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 xpsval.t . 2 𝑇 = (𝑅 Γ—s 𝑆)
2 xpsval.x . 2 𝑋 = (Baseβ€˜π‘…)
3 xpsval.y . 2 π‘Œ = (Baseβ€˜π‘†)
4 xpsval.1 . 2 (πœ‘ β†’ 𝑅 ∈ 𝑉)
5 xpsval.2 . 2 (πœ‘ β†’ 𝑆 ∈ π‘Š)
6 xpsadd.3 . 2 (πœ‘ β†’ 𝐴 ∈ 𝑋)
7 xpsadd.4 . 2 (πœ‘ β†’ 𝐡 ∈ π‘Œ)
8 xpsadd.5 . 2 (πœ‘ β†’ 𝐢 ∈ 𝑋)
9 xpsadd.6 . 2 (πœ‘ β†’ 𝐷 ∈ π‘Œ)
10 xpsadd.7 . 2 (πœ‘ β†’ (𝐴 Β· 𝐢) ∈ 𝑋)
11 xpsadd.8 . 2 (πœ‘ β†’ (𝐡 Γ— 𝐷) ∈ π‘Œ)
12 xpsmul.m . 2 Β· = (.rβ€˜π‘…)
13 xpsmul.n . 2 Γ— = (.rβ€˜π‘†)
14 xpsmul.p . 2 βˆ™ = (.rβ€˜π‘‡)
15 eqid 2732 . 2 (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) = (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})
16 eqid 2732 . 2 ((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}) = ((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})
1715xpsff1o2 17511 . . . . 5 (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):(𝑋 Γ— π‘Œ)–1-1-ontoβ†’ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})
18 f1ocnv 6842 . . . . 5 ((π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):(𝑋 Γ— π‘Œ)–1-1-ontoβ†’ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) β†’ β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})–1-1-ontoβ†’(𝑋 Γ— π‘Œ))
1917, 18mp1i 13 . . . 4 (πœ‘ β†’ β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})–1-1-ontoβ†’(𝑋 Γ— π‘Œ))
20 f1ofo 6837 . . . 4 (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})–1-1-ontoβ†’(𝑋 Γ— π‘Œ) β†’ β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})–ontoβ†’(𝑋 Γ— π‘Œ))
2119, 20syl 17 . . 3 (πœ‘ β†’ β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}):ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})–ontoβ†’(𝑋 Γ— π‘Œ))
2219f1ocpbl 17467 . . 3 ((πœ‘ ∧ (π‘Ž ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) ∧ 𝑏 ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})) ∧ (𝑐 ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) ∧ 𝑑 ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}))) β†’ (((β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜π‘Ž) = (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜π‘) ∧ (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜π‘) = (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜π‘‘)) β†’ (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜(π‘Ž(.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))𝑏)) = (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜(𝑐(.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))𝑑))))
23 eqid 2732 . . . 4 (Scalarβ€˜π‘…) = (Scalarβ€˜π‘…)
241, 2, 3, 4, 5, 15, 23, 16xpsval 17512 . . 3 (πœ‘ β†’ 𝑇 = (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) β€œs ((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})))
251, 2, 3, 4, 5, 15, 23, 16xpsrnbas 17513 . . 3 (πœ‘ β†’ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) = (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})))
26 ovexd 7440 . . 3 (πœ‘ β†’ ((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}) ∈ V)
27 eqid 2732 . . 3 (.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) = (.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))
2821, 22, 24, 25, 26, 27, 14imasmulval 17477 . 2 ((πœ‘ ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©}) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ ran (π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})) β†’ ((β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜{βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩}) βˆ™ (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜{βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩})) = (β—‘(π‘₯ ∈ 𝑋, 𝑦 ∈ π‘Œ ↦ {βŸ¨βˆ…, π‘₯⟩, ⟨1o, π‘¦βŸ©})β€˜({βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} (.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})){βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩})))
29 eqid 2732 . . 3 (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) = (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))
30 fvexd 6903 . . 3 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ (Scalarβ€˜π‘…) ∈ V)
31 2on 8476 . . . 4 2o ∈ On
3231a1i 11 . . 3 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ 2o ∈ On)
33 simp1 1136 . . 3 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ {βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o)
34 simp2 1137 . . 3 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})))
35 simp3 1138 . . 3 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})))
3616, 29, 30, 32, 33, 34, 35, 27prdsmulrval 17417 . 2 (({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©} Fn 2o ∧ {βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})) ∧ {βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩} ∈ (Baseβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}))) β†’ ({βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩} (.rβ€˜((Scalarβ€˜π‘…)Xs{βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©})){βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩}) = (π‘˜ ∈ 2o ↦ (({βŸ¨βˆ…, 𝐴⟩, ⟨1o, 𝐡⟩}β€˜π‘˜)(.rβ€˜({βŸ¨βˆ…, π‘…βŸ©, ⟨1o, π‘†βŸ©}β€˜π‘˜))({βŸ¨βˆ…, 𝐢⟩, ⟨1o, 𝐷⟩}β€˜π‘˜))))
371, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 28, 36xpsaddlem 17515 1 (πœ‘ β†’ (⟨𝐴, 𝐡⟩ βˆ™ ⟨𝐢, 𝐷⟩) = ⟨(𝐴 Β· 𝐢), (𝐡 Γ— 𝐷)⟩)
Colors of variables: wff setvar class
Syntax hints:   β†’ wi 4   ∧ w3a 1087   = wceq 1541   ∈ wcel 2106  Vcvv 3474  βˆ…c0 4321  {cpr 4629  βŸ¨cop 4633   Γ— cxp 5673  β—‘ccnv 5674  ran crn 5676  Oncon0 6361   Fn wfn 6535  β€“ontoβ†’wfo 6538  β€“1-1-ontoβ†’wf1o 6539  β€˜cfv 6540  (class class class)co 7405   ∈ cmpo 7407  1oc1o 8455  2oc2o 8456  Basecbs 17140  .rcmulr 17194  Scalarcsca 17196  Xscprds 17387   Γ—s cxps 17448
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
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-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-uni 4908  df-iun 4998  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-om 7852  df-1st 7971  df-2nd 7972  df-frecs 8262  df-wrecs 8293  df-recs 8367  df-rdg 8406  df-1o 8462  df-2o 8463  df-er 8699  df-map 8818  df-ixp 8888  df-en 8936  df-dom 8937  df-sdom 8938  df-fin 8939  df-sup 9433  df-inf 9434  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-7 12276  df-8 12277  df-9 12278  df-n0 12469  df-z 12555  df-dec 12674  df-uz 12819  df-fz 13481  df-struct 17076  df-slot 17111  df-ndx 17123  df-base 17141  df-plusg 17206  df-mulr 17207  df-sca 17209  df-vsca 17210  df-ip 17211  df-tset 17212  df-ple 17213  df-ds 17215  df-hom 17217  df-cco 17218  df-prds 17389  df-imas 17450  df-xps 17452
This theorem is referenced by:  rngqiprnglin  46767
  Copyright terms: Public domain W3C validator