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

Theorem rngqiprngimf1 21608
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 20526 . . . . . . . . . . . . 13 (𝐽 ∈ Ring → 𝐽 ∈ Rng)
64, 5syl 18 . . . . . . . . . . . 12 (𝜑 → 𝐽 ∈ Rng)
73, 6eqeltrrid 2868 . . . . . . . . . . 11 (𝜑 → (𝑅 ↾s 𝐼) ∈ Rng)
81, 2, 7rng2idlnsg 21572 . . . . . . . . . 10 (𝜑 → 𝐼 ∈ (NrmSGrp‘𝑅))
9 nsgsubg 19380 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → 𝐼 ∈ (SubGrp‘𝑅))
108, 9syl 18 . . . . . . . . 9 (𝜑 → 𝐼 ∈ (SubGrp‘𝑅))
11 rngqiprngim.q . . . . . . . . . . 11 𝑄 = (𝑅 /s ∼ )
12 rngqiprngim.g . . . . . . . . . . . 12 ∼ = (𝑅 ~QG 𝐼)
1312oveq2i 7438 . . . . . . . . . . 11 (𝑅 /s ∼ ) = (𝑅 /s (𝑅 ~QG 𝐼))
1411, 13eqtri 2786 . . . . . . . . . 10 𝑄 = (𝑅 /s (𝑅 ~QG 𝐼))
15 eqid 2763 . . . . . . . . . 10 (2Ideal‘𝑅) = (2Ideal‘𝑅)
1614, 15qus2idrng 21579 . . . . . . . . 9 ((𝑅 ∈ Rng ∧ 𝐼 ∈ (2Ideal‘𝑅) ∧ 𝐼 ∈ (SubGrp‘𝑅)) → 𝑄 ∈ Rng)
171, 2, 10, 16syl3anc 1398 . . . . . . . 8 (𝜑 → 𝑄 ∈ Rng)
18 rnggrp 20392 . . . . . . . . 9 (𝑄 ∈ Rng → 𝑄 ∈ Grp)
1918grpmndd 19169 . . . . . . . 8 (𝑄 ∈ Rng → 𝑄 ∈ Mnd)
2017, 19syl 18 . . . . . . 7 (𝜑 → 𝑄 ∈ Mnd)
21 ringmnd 20482 . . . . . . . 8 (𝐽 ∈ Ring → 𝐽 ∈ Mnd)
224, 21syl 18 . . . . . . 7 (𝜑 → 𝐽 ∈ Mnd)
23 rngqiprngim.p . . . . . . . 8 𝑃 = (𝑄 ×s 𝐽)
2423xpsmnd0 18984 . . . . . . 7 ((𝑄 ∈ Mnd ∧ 𝐽 ∈ Mnd) → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2520, 22, 24syl2anc 596 . . . . . 6 (𝜑 → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2625sneqd 4595 . . . . 5 (𝜑 → {(0g‘𝑃)} = {⟨(0g‘𝑄), (0g‘𝐽)⟩})
2726imaeq2d 6057 . . . 4 (𝜑 → (◡𝐹 “ {(0g‘𝑃)}) = (◡𝐹 “ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
28 nfv 1948 . . . . . 6 Ⅎ𝑥𝜑
29 opex 5435 . . . . . . 7 ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V
3029a1i 11 . . . . . 6 ((𝜑 ∧ 𝑥 ∈ 𝐵) → ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V)
31 rngqiprngim.f . . . . . 6 𝐹 = (𝑥 ∈ 𝐵 ↦ ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩)
3228, 30, 31fnmptd 6688 . . . . 5 (𝜑 → 𝐹 Fn 𝐵)
33 fncnvima2 7068 . . . . 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 21606 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (𝐹‘𝑎) = ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩)
4039eleq1d 2848 . . . . . 6 ((𝜑 ∧ 𝑎 ∈ 𝐵) → ((𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
4140rabbidva 3421 . . . . 5 (𝜑 → {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {𝑎 ∈ 𝐵 ∣ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}})
42 eceq1 8768 . . . . . . . 8 (𝑎 = (0g‘𝑅) → [𝑎] ∼ = [(0g‘𝑅)] ∼ )
43 oveq2 7435 . . . . . . . 8 (𝑎 = (0g‘𝑅) → ( 1 · 𝑎) = ( 1 · (0g‘𝑅)))
4442, 43opeq12d 4850 . . . . . . 7 (𝑎 = (0g‘𝑅) → ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩)
4544eleq1d 2848 . . . . . 6 (𝑎 = (0g‘𝑅) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
46 rnggrp 20392 . . . . . . . . 9 (𝑅 ∈ Rng → 𝑅 ∈ Grp)
471, 46syl 18 . . . . . . . 8 (𝜑 → 𝑅 ∈ Grp)
4847grpmndd 19169 . . . . . . 7 (𝜑 → 𝑅 ∈ Mnd)
49 eqid 2763 . . . . . . . 8 (0g‘𝑅) = (0g‘𝑅)
5035, 49mndidcl 18951 . . . . . . 7 (𝑅 ∈ Mnd → (0g‘𝑅) ∈ 𝐵)
5148, 50syl 18 . . . . . 6 (𝜑 → (0g‘𝑅) ∈ 𝐵)
5212eceq2i 8771 . . . . . . . . 9 [(0g‘𝑅)] ∼ = [(0g‘𝑅)](𝑅 ~QG 𝐼)
5314, 49qus0 19416 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
548, 53syl 18 . . . . . . . . 9 (𝜑 → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
5552, 54eqtrid 2810 . . . . . . . 8 (𝜑 → [(0g‘𝑅)] ∼ = (0g‘𝑄))
561, 2, 7rng2idl0 21573 . . . . . . . . . . 11 (𝜑 → (0g‘𝑅) ∈ 𝐼)
5735, 152idlss 21568 . . . . . . . . . . . 12 (𝐼 ∈ (2Ideal‘𝑅) → 𝐼 ⊆ 𝐵)
582, 57syl 18 . . . . . . . . . . 11 (𝜑 → 𝐼 ⊆ 𝐵)
593, 35, 49ress0g 18966 . . . . . . . . . . 11 ((𝑅 ∈ Mnd ∧ (0g‘𝑅) ∈ 𝐼 ∧ 𝐼 ⊆ 𝐵) → (0g‘𝑅) = (0g‘𝐽))
6048, 56, 58, 59syl3anc 1398 . . . . . . . . . 10 (𝜑 → (0g‘𝑅) = (0g‘𝐽))
6160oveq2d 7443 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝑅)) = ( 1 · (0g‘𝐽)))
623, 36ressmulr 17490 . . . . . . . . . . 11 (𝐼 ∈ (2Ideal‘𝑅) → · = (.r‘𝐽))
632, 62syl 18 . . . . . . . . . 10 (𝜑 → · = (.r‘𝐽))
6463oveqd 7444 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝐽)) = ( 1 (.r‘𝐽)(0g‘𝐽)))
65 eqid 2763 . . . . . . . . . . 11 (Base‘𝐽) = (Base‘𝐽)
6665, 37ringidcl 20506 . . . . . . . . . 10 (𝐽 ∈ Ring → 1 ∈ (Base‘𝐽))
67 eqid 2763 . . . . . . . . . . 11 (.r‘𝐽) = (.r‘𝐽)
68 eqid 2763 . . . . . . . . . . 11 (0g‘𝐽) = (0g‘𝐽)
6965, 67, 68ringrz 20537 . . . . . . . . . 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 4850 . . . . . . 7 (𝜑 → ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
73 opex 5435 . . . . . . . 8 ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ V
7473elsn 4598 . . . . . . 7 (⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
7572, 74sylibr 237 . . . . . 6 (𝜑 → ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩})
76 opex 5435 . . . . . . . . . 10 ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ V
7776elsn 4598 . . . . . . . . 9 (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
7812ovexi 7461 . . . . . . . . . . 11 ∼ ∈ V
79 ecexg 8732 . . . . . . . . . . 11 ( ∼ ∈ V → [𝑎] ∼ ∈ V)
8078, 79ax-mp 5 . . . . . . . . . 10 [𝑎] ∼ ∈ V
81 ovex 7460 . . . . . . . . . 10 ( 1 · 𝑎) ∈ V
8280, 81opth 5448 . . . . . . . . 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 21602 . . . . . . . 8 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (([𝑎] ∼ = (0g‘𝑄) ∧ ( 1 · 𝑎) = (0g‘𝐽)) → 𝑎 = (0g‘𝑅)))
8583, 84biimtrid 245 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} → 𝑎 = (0g‘𝑅)))
8685imp 412 . . . . . 6 (((𝜑 ∧ 𝑎 ∈ 𝐵) ∧ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}) → 𝑎 = (0g‘𝑅))
8745, 51, 75, 86rabeqsnd 4629 . . . . 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 21607 . . . 4 (𝜑 → 𝐹 ∈ (𝑅 GrpHom 𝑃))
91 eqid 2763 . . . . 5 (Base‘𝑃) = (Base‘𝑃)
92 eqid 2763 . . . . 5 (0g‘𝑃) = (0g‘𝑃)
9335, 91, 49, 92kerf1ghm 19473 . . . 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 21603 . . 3 (𝜑 → (Base‘𝑃) = (𝐶 × 𝐼))
9996, 97, 98f1eq123d 6824 . 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 1569   ∈ wcel 2146  {crab 3415  Vcvv 3453   ⊆ wss 3899  {csn 4587  ⟨cop 4837   ↦ cmpt 5188   × cxp 5652  ◡ccnv 5653   “ cima 5657   Fn wfn 6541  –1-1→wf1 6543  ‘cfv 6546  (class class class)co 7427  [cec 8726  Basecbs 17399   ↾s cress 17420  .rcmulr 17441  0gc0g 17622   /s cqus 17689   ×s cxps 17690  Mndcmnd 18935  Grpcgrp 19156  SubGrpcsubg 19342  NrmSGrpcnsg 19343   ~QG cqg 19344   GrpHom cghm 19439  Rngcrng 20386  1rcur 20419  Ringcrg 20471  2Idealc2idl 21554
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1827  ax-4 1841  ax-5 1944  ax-6 2001  ax-7 2042  ax-8 2148  ax-9 2156  ax-10 2179  ax-11 2196  ax-12 2215  ax-ext 2735  ax-rep 5234  ax-sep 5251  ax-nul 5262  ax-pow 5330  ax-pr 5394  ax-un 7758  ax-cnex 11266  ax-resscn 11267  ax-1cn 11268  ax-icn 11269  ax-addcl 11270  ax-addrcl 11271  ax-mulcl 11272  ax-mulrcl 11273  ax-mulcom 11274  ax-addass 11275  ax-mulass 11276  ax-distr 11277  ax-i2m1 11278  ax-1ne0 11279  ax-1rid 11280  ax-rnegex 11281  ax-rrecex 11282  ax-cnre 11283  ax-pre-lttri 11284  ax-pre-lttrn 11285  ax-pre-ltadd 11286  ax-pre-mulgt0 11287
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1572  df-fal 1582  df-ex 1812  df-nf 1816  df-sb 2101  df-mo 2567  df-eu 2597  df-clab 2742  df-cleq 2755  df-clel 2838  df-nfc 2912  df-ne 2959  df-nel 3065  df-ral 3080  df-rex 3090  df-rmo 3368  df-reu 3369  df-rab 3416  df-v 3455  df-sbc 3742  df-csb 3851  df-ss 3900  df-pss 4016  df-dif 4049  df-in 4093  df-un 4153  df-nul 4281  df-if 4485  df-pw 4561  df-sn 4588  df-pr 4590  df-tp 4592  df-op 4838  df-uni 4870  df-iun 4955  df-br 5106  df-opab 5170  df-mpt 5189  df-tr 5215  df-id 5549  df-eprel 5554  df-po 5562  df-so 5563  df-fr 5607  df-we 5609  df-xp 5660  df-rel 5661  df-cnv 5662  df-co 5663  df-dm 5664  df-rn 5665  df-res 5666  df-ima 5667  df-pred 6310  df-ord 6371  df-on 6372  df-lim 6373  df-suc 6374  df-iota 6500  df-fun 6548  df-fn 6549  df-f 6550  df-f1 6551  df-fo 6552  df-f1o 6553  df-fv 6554  df-riota 7384  df-ov 7430  df-oprab 7431  df-mpo 7432  df-om 7885  df-1st 8008  df-2nd 8009  df-tpos 8254  df-frecs 8310  df-wrecs 8341  df-recs 8390  df-rdg 8429  df-1o 8487  df-2o 8488  df-er 8728  df-ec 8730  df-qs 8734  df-map 8860  df-ixp 8937  df-en 8985  df-dom 8986  df-sdom 8987  df-fin 8988  df-sup 9444  df-inf 9445  df-pnf 11355  df-mnf 11356  df-xr 11357  df-ltxr 11358  df-le 11359  df-sub 11553  df-neg 11554  df-nn 12346  df-2 12415  df-3 12416  df-4 12417  df-5 12418  df-6 12419  df-7 12420  df-8 12421  df-9 12422  df-n0 12617  df-z 12704  df-dec 12825  df-uz 12976  df-fz 13650  df-struct 17337  df-sets 17354  df-slot 17372  df-ndx 17384  df-base 17400  df-ress 17421  df-plusg 17453  df-mulr 17454  df-sca 17456  df-vsca 17457  df-ip 17458  df-tset 17459  df-ple 17460  df-ds 17462  df-hom 17464  df-cco 17465  df-0g 17624  df-prds 17630  df-imas 17692  df-qus 17693  df-xps 17694  df-mgm 18828  df-sgrp 18920  df-mnd 18936  df-grp 19159  df-minusg 19160  df-sbg 19161  df-subg 19345  df-nsg 19346  df-eqg 19347  df-ghm 19440  df-cmn 20008  df-abl 20009  df-mgp 20373  df-rng 20387  df-ur 20420  df-ring 20473  df-oppr 20579  df-dvdsr 20599  df-unit 20600  df-invr 20630  df-subrng 20810  df-lss 21219  df-sra 21460  df-rgmod 21461  df-lidl 21498  df-2idl 21555
This theorem is used by:  rngqiprngim  21612
  Copyright terms: Public domain W3C validator