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

Theorem rngqiprngimf1 21647
Description: 𝐹 is a one-to-one function from (the base set of) a non-unital ring to the product of the (base set of the) quotient with a two-sided ideal and the (base set of the) two-sided ideal. (Contributed by AV, 7-Mar-2025.)
Hypotheses
Ref Expression
rng2idlring.r (𝜑 → 𝑅 ∈ Rng)
rng2idlring.i (𝜑 → 𝐼 ∈ (2Ideal‘𝑅))
rng2idlring.j 𝐽 = (𝑅 ↾s 𝐼)
rng2idlring.u (𝜑 → 𝐽 ∈ Ring)
rng2idlring.b 𝐵 = (Base‘𝑅)
rng2idlring.t · = (.r‘𝑅)
rng2idlring.1 1 = (1r‘𝐽)
rngqiprngim.g ∼ = (𝑅 ~QG 𝐼)
rngqiprngim.q 𝑄 = (𝑅 /s ∼ )
rngqiprngim.c 𝐶 = (Base‘𝑄)
rngqiprngim.p 𝑃 = (𝑄 ×s 𝐽)
rngqiprngim.f 𝐹 = (𝑥 ∈ 𝐵 ↦ ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩)
Assertion
Ref Expression
rngqiprngimf1 (𝜑 → 𝐹:𝐵⟶1-1(𝐶 × 𝐼))
Distinct variable groups:   𝑥,𝐶   𝑥,𝐼   𝑥,𝐵   𝜑,𝑥   𝑥, ∼   𝑥, 1   𝑥, ·   𝑥,𝑅
Allowed substitution hints:   𝑃(𝑥)   𝑄(𝑥)   𝐹(𝑥)   𝐽(𝑥)

Proof of Theorem rngqiprngimf1
Dummy variable 𝑎 is distinct from all other variables.
StepHypRef Expression
1 rng2idlring.r . . . . . . . . 9 (𝜑 → 𝑅 ∈ Rng)
2 rng2idlring.i . . . . . . . . 9 (𝜑 → 𝐼 ∈ (2Ideal‘𝑅))
3 rng2idlring.j . . . . . . . . . . . 12 𝐽 = (𝑅 ↾s 𝐼)
4 rng2idlring.u . . . . . . . . . . . . 13 (𝜑 → 𝐽 ∈ Ring)
5 ringrng 20565 . . . . . . . . . . . . 13 (𝐽 ∈ Ring → 𝐽 ∈ Rng)
64, 5syl 18 . . . . . . . . . . . 12 (𝜑 → 𝐽 ∈ Rng)
73, 6eqeltrrid 2869 . . . . . . . . . . 11 (𝜑 → (𝑅 ↾s 𝐼) ∈ Rng)
81, 2, 7rng2idlnsg 21611 . . . . . . . . . 10 (𝜑 → 𝐼 ∈ (NrmSGrp‘𝑅))
9 nsgsubg 19418 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → 𝐼 ∈ (SubGrp‘𝑅))
108, 9syl 18 . . . . . . . . 9 (𝜑 → 𝐼 ∈ (SubGrp‘𝑅))
11 rngqiprngim.q . . . . . . . . . . 11 𝑄 = (𝑅 /s ∼ )
12 rngqiprngim.g . . . . . . . . . . . 12 ∼ = (𝑅 ~QG 𝐼)
1312oveq2i 7462 . . . . . . . . . . 11 (𝑅 /s ∼ ) = (𝑅 /s (𝑅 ~QG 𝐼))
1411, 13eqtri 2786 . . . . . . . . . 10 𝑄 = (𝑅 /s (𝑅 ~QG 𝐼))
15 eqid 2763 . . . . . . . . . 10 (2Ideal‘𝑅) = (2Ideal‘𝑅)
1614, 15qus2idrng 21618 . . . . . . . . 9 ((𝑅 ∈ Rng ∧ 𝐼 ∈ (2Ideal‘𝑅) ∧ 𝐼 ∈ (SubGrp‘𝑅)) → 𝑄 ∈ Rng)
171, 2, 10, 16syl3anc 1399 . . . . . . . 8 (𝜑 → 𝑄 ∈ Rng)
18 rnggrp 20431 . . . . . . . . 9 (𝑄 ∈ Rng → 𝑄 ∈ Grp)
1918grpmndd 19207 . . . . . . . 8 (𝑄 ∈ Rng → 𝑄 ∈ Mnd)
2017, 19syl 18 . . . . . . 7 (𝜑 → 𝑄 ∈ Mnd)
21 ringmnd 20521 . . . . . . . 8 (𝐽 ∈ Ring → 𝐽 ∈ Mnd)
224, 21syl 18 . . . . . . 7 (𝜑 → 𝐽 ∈ Mnd)
23 rngqiprngim.p . . . . . . . 8 𝑃 = (𝑄 ×s 𝐽)
2423xpsmnd0 19022 . . . . . . 7 ((𝑄 ∈ Mnd ∧ 𝐽 ∈ Mnd) → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2520, 22, 24syl2anc 596 . . . . . 6 (𝜑 → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2625sneqd 4596 . . . . 5 (𝜑 → {(0g‘𝑃)} = {⟨(0g‘𝑄), (0g‘𝐽)⟩})
2726imaeq2d 6070 . . . 4 (𝜑 → (◡𝐹 “ {(0g‘𝑃)}) = (◡𝐹 “ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
28 nfv 1949 . . . . . 6 Ⅎ𝑥𝜑
29 opex 5439 . . . . . . 7 ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V
3029a1i 11 . . . . . 6 ((𝜑 ∧ 𝑥 ∈ 𝐵) → ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V)
31 rngqiprngim.f . . . . . 6 𝐹 = (𝑥 ∈ 𝐵 ↦ ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩)
3228, 30, 31fnmptd 6710 . . . . 5 (𝜑 → 𝐹 Fn 𝐵)
33 fncnvima2 7092 . . . . 5 (𝐹 Fn 𝐵 → (◡𝐹 “ {⟨(0g‘𝑄), (0g‘𝐽)⟩}) = {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}})
3432, 33syl 18 . . . 4 (𝜑 → (◡𝐹 “ {⟨(0g‘𝑄), (0g‘𝐽)⟩}) = {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}})
35 rng2idlring.b . . . . . . . 8 𝐵 = (Base‘𝑅)
36 rng2idlring.t . . . . . . . 8 · = (.r‘𝑅)
37 rng2idlring.1 . . . . . . . 8 1 = (1r‘𝐽)
38 rngqiprngim.c . . . . . . . 8 𝐶 = (Base‘𝑄)
391, 2, 3, 4, 35, 36, 37, 12, 11, 38, 23, 31rngqiprngimfv 21645 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (𝐹‘𝑎) = ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩)
4039eleq1d 2849 . . . . . 6 ((𝜑 ∧ 𝑎 ∈ 𝐵) → ((𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
4140rabbidva 3422 . . . . 5 (𝜑 → {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {𝑎 ∈ 𝐵 ∣ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}})
42 eceq1 8795 . . . . . . . 8 (𝑎 = (0g‘𝑅) → [𝑎] ∼ = [(0g‘𝑅)] ∼ )
43 oveq2 7459 . . . . . . . 8 (𝑎 = (0g‘𝑅) → ( 1 · 𝑎) = ( 1 · (0g‘𝑅)))
4442, 43opeq12d 4853 . . . . . . 7 (𝑎 = (0g‘𝑅) → ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩)
4544eleq1d 2849 . . . . . 6 (𝑎 = (0g‘𝑅) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
46 rnggrp 20431 . . . . . . . . 9 (𝑅 ∈ Rng → 𝑅 ∈ Grp)
471, 46syl 18 . . . . . . . 8 (𝜑 → 𝑅 ∈ Grp)
4847grpmndd 19207 . . . . . . 7 (𝜑 → 𝑅 ∈ Mnd)
49 eqid 2763 . . . . . . . 8 (0g‘𝑅) = (0g‘𝑅)
5035, 49mndidcl 18989 . . . . . . 7 (𝑅 ∈ Mnd → (0g‘𝑅) ∈ 𝐵)
5148, 50syl 18 . . . . . 6 (𝜑 → (0g‘𝑅) ∈ 𝐵)
5212eceq2i 8798 . . . . . . . . 9 [(0g‘𝑅)] ∼ = [(0g‘𝑅)](𝑅 ~QG 𝐼)
5314, 49qus0 19454 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
548, 53syl 18 . . . . . . . . 9 (𝜑 → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
5552, 54eqtrid 2810 . . . . . . . 8 (𝜑 → [(0g‘𝑅)] ∼ = (0g‘𝑄))
561, 2, 7rng2idl0 21612 . . . . . . . . . . 11 (𝜑 → (0g‘𝑅) ∈ 𝐼)
5735, 152idlss 21607 . . . . . . . . . . . 12 (𝐼 ∈ (2Ideal‘𝑅) → 𝐼 ⊆ 𝐵)
582, 57syl 18 . . . . . . . . . . 11 (𝜑 → 𝐼 ⊆ 𝐵)
593, 35, 49ress0g 19004 . . . . . . . . . . 11 ((𝑅 ∈ Mnd ∧ (0g‘𝑅) ∈ 𝐼 ∧ 𝐼 ⊆ 𝐵) → (0g‘𝑅) = (0g‘𝐽))
6048, 56, 58, 59syl3anc 1399 . . . . . . . . . 10 (𝜑 → (0g‘𝑅) = (0g‘𝐽))
6160oveq2d 7467 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝑅)) = ( 1 · (0g‘𝐽)))
623, 36ressmulr 17524 . . . . . . . . . . 11 (𝐼 ∈ (2Ideal‘𝑅) → · = (.r‘𝐽))
632, 62syl 18 . . . . . . . . . 10 (𝜑 → · = (.r‘𝐽))
6463oveqd 7468 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝐽)) = ( 1 (.r‘𝐽)(0g‘𝐽)))
65 eqid 2763 . . . . . . . . . . 11 (Base‘𝐽) = (Base‘𝐽)
6665, 37ringidcl 20545 . . . . . . . . . 10 (𝐽 ∈ Ring → 1 ∈ (Base‘𝐽))
67 eqid 2763 . . . . . . . . . . 11 (.r‘𝐽) = (.r‘𝐽)
68 eqid 2763 . . . . . . . . . . 11 (0g‘𝐽) = (0g‘𝐽)
6965, 67, 68ringrz 20576 . . . . . . . . . 10 ((𝐽 ∈ Ring ∧ 1 ∈ (Base‘𝐽)) → ( 1 (.r‘𝐽)(0g‘𝐽)) = (0g‘𝐽))
704, 66, 69syl2anc2 597 . . . . . . . . 9 (𝜑 → ( 1 (.r‘𝐽)(0g‘𝐽)) = (0g‘𝐽))
7161, 64, 703eqtrd 2802 . . . . . . . 8 (𝜑 → ( 1 · (0g‘𝑅)) = (0g‘𝐽))
7255, 71opeq12d 4853 . . . . . . 7 (𝜑 → ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
73 opex 5439 . . . . . . . 8 ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ V
7473elsn 4599 . . . . . . 7 (⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
7572, 74sylibr 237 . . . . . 6 (𝜑 → ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩})
76 opex 5439 . . . . . . . . . 10 ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ V
7776elsn 4599 . . . . . . . . 9 (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
7812ovexi 7485 . . . . . . . . . . 11 ∼ ∈ V
79 ecexg 8759 . . . . . . . . . . 11 ( ∼ ∈ V → [𝑎] ∼ ∈ V)
8078, 79ax-mp 5 . . . . . . . . . 10 [𝑎] ∼ ∈ V
81 ovex 7484 . . . . . . . . . 10 ( 1 · 𝑎) ∈ V
8280, 81opth 5452 . . . . . . . . 9 (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩ ↔ ([𝑎] ∼ = (0g‘𝑄) ∧ ( 1 · 𝑎) = (0g‘𝐽)))
8377, 82bitri 278 . . . . . . . 8 (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ([𝑎] ∼ = (0g‘𝑄) ∧ ( 1 · 𝑎) = (0g‘𝐽)))
841, 2, 3, 4, 35, 36, 37, 12, 11rngqiprngimf1lem 21641 . . . . . . . 8 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (([𝑎] ∼ = (0g‘𝑄) ∧ ( 1 · 𝑎) = (0g‘𝐽)) → 𝑎 = (0g‘𝑅)))
8583, 84biimtrid 245 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} → 𝑎 = (0g‘𝑅)))
8685imp 412 . . . . . 6 (((𝜑 ∧ 𝑎 ∈ 𝐵) ∧ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}) → 𝑎 = (0g‘𝑅))
8745, 51, 75, 86rabeqsnd 4631 . . . . 5 (𝜑 → {𝑎 ∈ 𝐵 ∣ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {(0g‘𝑅)})
8841, 87eqtrd 2798 . . . 4 (𝜑 → {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {(0g‘𝑅)})
8927, 34, 883eqtrd 2802 . . 3 (𝜑 → (◡𝐹 “ {(0g‘𝑃)}) = {(0g‘𝑅)})
901, 2, 3, 4, 35, 36, 37, 12, 11, 38, 23, 31rngqiprngghm 21646 . . . 4 (𝜑 → 𝐹 ∈ (𝑅 GrpHom 𝑃))
91 eqid 2763 . . . . 5 (Base‘𝑃) = (Base‘𝑃)
92 eqid 2763 . . . . 5 (0g‘𝑃) = (0g‘𝑃)
9335, 91, 49, 92kerf1ghm 19511 . . . 4 (𝐹 ∈ (𝑅 GrpHom 𝑃) → (𝐹:𝐵⟶1-1(Base‘𝑃) ↔ (◡𝐹 “ {(0g‘𝑃)}) = {(0g‘𝑅)}))
9490, 93syl 18 . . 3 (𝜑 → (𝐹:𝐵⟶1-1(Base‘𝑃) ↔ (◡𝐹 “ {(0g‘𝑃)}) = {(0g‘𝑅)}))
9589, 94mpbird 260 . 2 (𝜑 → 𝐹:𝐵⟶1-1(Base‘𝑃))
96 eqidd 2764 . . 3 (𝜑 → 𝐹 = 𝐹)
97 eqidd 2764 . . 3 (𝜑 → 𝐵 = 𝐵)
981, 2, 3, 4, 35, 36, 37, 12, 11, 38, 23rngqipbas 21642 . . 3 (𝜑 → (Base‘𝑃) = (𝐶 × 𝐼))
9996, 97, 98f1eq123d 6846 . 2 (𝜑 → (𝐹:𝐵⟶1-1(Base‘𝑃) ↔ 𝐹:𝐵⟶1-1(𝐶 × 𝐼)))
10095, 99mpbid 235 1 (𝜑 → 𝐹:𝐵⟶1-1(𝐶 × 𝐼))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ↔ wb 209   ∧ wa 401   = wceq 1570   ∈ wcel 2147  {crab 3416  Vcvv 3454   ⊆ wss 3900  {csn 4588  ⟨cop 4840   ↦ cmpt 5192   × cxp 5656  ◡ccnv 5657   “ cima 5661   Fn wfn 6561  ⟶1-1wf1 6563  ‘cfv 6566  (class class class)co 7451  [cec 8753  Basecbs 17431   ↾s cress 17452  .rcmulr 17473  0gc0g 17660   /s cqus 17727   ×s cxps 17728  Mndcmnd 18973  Grpcgrp 19194  SubGrpcsubg 19380  NrmSGrpcnsg 19381   ~QG cqg 19382   GrpHom cghm 19477  Rngcrng 20425  1rcur 20458  Ringcrg 20510  2Idealc2idl 21593
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1828  ax-4 1842  ax-5 1945  ax-6 2002  ax-7 2043  ax-8 2149  ax-9 2157  ax-10 2180  ax-11 2197  ax-12 2216  ax-ext 2735  ax-rep 5238  ax-sep 5255  ax-nul 5266  ax-pow 5334  ax-pr 5398  ax-un 7783  ax-cnex 11295  ax-resscn 11296  ax-1cn 11297  ax-icn 11298  ax-addcl 11299  ax-addrcl 11300  ax-mulcl 11301  ax-mulrcl 11302  ax-mulcom 11303  ax-addass 11304  ax-mulass 11305  ax-distr 11306  ax-i2m1 11307  ax-1ne0 11308  ax-1rid 11309  ax-rnegex 11310  ax-rrecex 11311  ax-cnre 11312  ax-pre-lttri 11313  ax-pre-lttrn 11314  ax-pre-ltadd 11315  ax-pre-mulgt0 11316
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1573  df-fal 1583  df-ex 1813  df-nf 1817  df-sb 2102  df-mo 2567  df-eu 2597  df-clab 2742  df-cleq 2755  df-clel 2839  df-nfc 2913  df-ne 2960  df-nel 3066  df-ral 3081  df-rex 3091  df-rmo 3369  df-reu 3370  df-rab 3417  df-v 3456  df-sbc 3743  df-csb 3852  df-ss 3901  df-pss 4017  df-dif 4050  df-in 4094  df-un 4154  df-nul 4282  df-if 4486  df-pw 4562  df-sn 4589  df-pr 4591  df-tp 4593  df-op 4841  df-uni 4873  df-iun 4958  df-br 5109  df-opab 5174  df-mpt 5193  df-tr 5219  df-id 5553  df-eprel 5558  df-po 5566  df-so 5567  df-fr 5611  df-we 5613  df-xp 5664  df-rel 5665  df-cnv 5666  df-co 5667  df-dm 5668  df-rn 5669  df-res 5670  df-ima 5671  df-pred 6330  df-ord 6391  df-on 6392  df-lim 6393  df-suc 6394  df-iota 6520  df-fun 6568  df-fn 6569  df-f 6570  df-f1 6571  df-fo 6572  df-f1o 6573  df-fv 6574  df-riota 7408  df-ov 7454  df-oprab 7455  df-mpo 7456  df-om 7912  df-1st 8035  df-2nd 8036  df-tpos 8281  df-frecs 8337  df-wrecs 8368  df-recs 8417  df-rdg 8456  df-1o 8514  df-2o 8515  df-er 8755  df-ec 8757  df-qs 8761  df-map 8887  df-ixp 8964  df-en 9012  df-dom 9013  df-sdom 9014  df-fin 9015  df-sup 9471  df-inf 9472  df-pnf 11384  df-mnf 11385  df-xr 11386  df-ltxr 11387  df-le 11388  df-sub 11582  df-neg 11583  df-nn 12376  df-2 12445  df-3 12446  df-4 12447  df-5 12448  df-6 12449  df-7 12450  df-8 12451  df-9 12452  df-n0 12647  df-z 12734  df-dec 12855  df-uz 13006  df-fz 13680  df-struct 17369  df-sets 17386  df-slot 17404  df-ndx 17416  df-base 17432  df-ress 17453  df-plusg 17486  df-mulr 17487  df-sca 17489  df-vsca 17490  df-ip 17491  df-tset 17492  df-ple 17493  df-ds 17495  df-hom 17497  df-cco 17498  df-0g 17662  df-prds 17668  df-imas 17730  df-qus 17731  df-xps 17732  df-mgm 18866  df-sgrp 18958  df-mnd 18974  df-grp 19197  df-minusg 19198  df-sbg 19199  df-subg 19383  df-nsg 19384  df-eqg 19385  df-ghm 19478  df-cmn 20047  df-abl 20048  df-mgp 20412  df-rng 20426  df-ur 20459  df-ring 20512  df-oppr 20618  df-dvdsr 20638  df-unit 20639  df-invr 20669  df-subrng 20849  df-lss 21258  df-sra 21499  df-rgmod 21500  df-lidl 21537  df-2idl 21594
This theorem is used by:  rngqiprngim  21651
  Copyright terms: Public domain W3C validator