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

Theorem rngqiprngimf1 21596
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 20514 . . . . . . . . . . . . 13 (𝐽 ∈ Ring → 𝐽 ∈ Rng)
64, 5syl 18 . . . . . . . . . . . 12 (𝜑 → 𝐽 ∈ Rng)
73, 6eqeltrrid 2866 . . . . . . . . . . 11 (𝜑 → (𝑅 ↾s 𝐼) ∈ Rng)
81, 2, 7rng2idlnsg 21560 . . . . . . . . . 10 (𝜑 → 𝐼 ∈ (NrmSGrp‘𝑅))
9 nsgsubg 19368 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → 𝐼 ∈ (SubGrp‘𝑅))
108, 9syl 18 . . . . . . . . 9 (𝜑 → 𝐼 ∈ (SubGrp‘𝑅))
11 rngqiprngim.q . . . . . . . . . . 11 𝑄 = (𝑅 /s ∼ )
12 rngqiprngim.g . . . . . . . . . . . 12 ∼ = (𝑅 ~QG 𝐼)
1312oveq2i 7431 . . . . . . . . . . 11 (𝑅 /s ∼ ) = (𝑅 /s (𝑅 ~QG 𝐼))
1411, 13eqtri 2784 . . . . . . . . . 10 𝑄 = (𝑅 /s (𝑅 ~QG 𝐼))
15 eqid 2761 . . . . . . . . . 10 (2Ideal‘𝑅) = (2Ideal‘𝑅)
1614, 15qus2idrng 21567 . . . . . . . . 9 ((𝑅 ∈ Rng ∧ 𝐼 ∈ (2Ideal‘𝑅) ∧ 𝐼 ∈ (SubGrp‘𝑅)) → 𝑄 ∈ Rng)
171, 2, 10, 16syl3anc 1398 . . . . . . . 8 (𝜑 → 𝑄 ∈ Rng)
18 rnggrp 20380 . . . . . . . . 9 (𝑄 ∈ Rng → 𝑄 ∈ Grp)
1918grpmndd 19157 . . . . . . . 8 (𝑄 ∈ Rng → 𝑄 ∈ Mnd)
2017, 19syl 18 . . . . . . 7 (𝜑 → 𝑄 ∈ Mnd)
21 ringmnd 20470 . . . . . . . 8 (𝐽 ∈ Ring → 𝐽 ∈ Mnd)
224, 21syl 18 . . . . . . 7 (𝜑 → 𝐽 ∈ Mnd)
23 rngqiprngim.p . . . . . . . 8 𝑃 = (𝑄 ×s 𝐽)
2423xpsmnd0 18972 . . . . . . 7 ((𝑄 ∈ Mnd ∧ 𝐽 ∈ Mnd) → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2520, 22, 24syl2anc 596 . . . . . 6 (𝜑 → (0g‘𝑃) = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
2625sneqd 4596 . . . . 5 (𝜑 → {(0g‘𝑃)} = {⟨(0g‘𝑄), (0g‘𝐽)⟩})
2726imaeq2d 6052 . . . 4 (𝜑 → (◡𝐹 “ {(0g‘𝑃)}) = (◡𝐹 “ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
28 nfv 1947 . . . . . 6 Ⅎ𝑥𝜑
29 opex 5432 . . . . . . 7 ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V
3029a1i 11 . . . . . 6 ((𝜑 ∧ 𝑥 ∈ 𝐵) → ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩ ∈ V)
31 rngqiprngim.f . . . . . 6 𝐹 = (𝑥 ∈ 𝐵 ↦ ⟨[𝑥] ∼ , ( 1 · 𝑥)⟩)
3228, 30, 31fnmptd 6680 . . . . 5 (𝜑 → 𝐹 Fn 𝐵)
33 fncnvima2 7060 . . . . 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 21594 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (𝐹‘𝑎) = ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩)
4039eleq1d 2846 . . . . . 6 ((𝜑 ∧ 𝑎 ∈ 𝐵) → ((𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
4140rabbidva 3419 . . . . 5 (𝜑 → {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {𝑎 ∈ 𝐵 ∣ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}})
42 eceq1 8757 . . . . . . . 8 (𝑎 = (0g‘𝑅) → [𝑎] ∼ = [(0g‘𝑅)] ∼ )
43 oveq2 7428 . . . . . . . 8 (𝑎 = (0g‘𝑅) → ( 1 · 𝑎) = ( 1 · (0g‘𝑅)))
4442, 43opeq12d 4841 . . . . . . 7 (𝑎 = (0g‘𝑅) → ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩)
4544eleq1d 2846 . . . . . 6 (𝑎 = (0g‘𝑅) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}))
46 rnggrp 20380 . . . . . . . . 9 (𝑅 ∈ Rng → 𝑅 ∈ Grp)
471, 46syl 18 . . . . . . . 8 (𝜑 → 𝑅 ∈ Grp)
4847grpmndd 19157 . . . . . . 7 (𝜑 → 𝑅 ∈ Mnd)
49 eqid 2761 . . . . . . . 8 (0g‘𝑅) = (0g‘𝑅)
5035, 49mndidcl 18939 . . . . . . 7 (𝑅 ∈ Mnd → (0g‘𝑅) ∈ 𝐵)
5148, 50syl 18 . . . . . 6 (𝜑 → (0g‘𝑅) ∈ 𝐵)
5212eceq2i 8760 . . . . . . . . 9 [(0g‘𝑅)] ∼ = [(0g‘𝑅)](𝑅 ~QG 𝐼)
5314, 49qus0 19404 . . . . . . . . . 10 (𝐼 ∈ (NrmSGrp‘𝑅) → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
548, 53syl 18 . . . . . . . . 9 (𝜑 → [(0g‘𝑅)](𝑅 ~QG 𝐼) = (0g‘𝑄))
5552, 54eqtrid 2808 . . . . . . . 8 (𝜑 → [(0g‘𝑅)] ∼ = (0g‘𝑄))
561, 2, 7rng2idl0 21561 . . . . . . . . . . 11 (𝜑 → (0g‘𝑅) ∈ 𝐼)
5735, 152idlss 21556 . . . . . . . . . . . 12 (𝐼 ∈ (2Ideal‘𝑅) → 𝐼 ⊆ 𝐵)
582, 57syl 18 . . . . . . . . . . 11 (𝜑 → 𝐼 ⊆ 𝐵)
593, 35, 49ress0g 18954 . . . . . . . . . . 11 ((𝑅 ∈ Mnd ∧ (0g‘𝑅) ∈ 𝐼 ∧ 𝐼 ⊆ 𝐵) → (0g‘𝑅) = (0g‘𝐽))
6048, 56, 58, 59syl3anc 1398 . . . . . . . . . 10 (𝜑 → (0g‘𝑅) = (0g‘𝐽))
6160oveq2d 7436 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝑅)) = ( 1 · (0g‘𝐽)))
623, 36ressmulr 17478 . . . . . . . . . . 11 (𝐼 ∈ (2Ideal‘𝑅) → · = (.r‘𝐽))
632, 62syl 18 . . . . . . . . . 10 (𝜑 → · = (.r‘𝐽))
6463oveqd 7437 . . . . . . . . 9 (𝜑 → ( 1 · (0g‘𝐽)) = ( 1 (.r‘𝐽)(0g‘𝐽)))
65 eqid 2761 . . . . . . . . . . 11 (Base‘𝐽) = (Base‘𝐽)
6665, 37ringidcl 20494 . . . . . . . . . 10 (𝐽 ∈ Ring → 1 ∈ (Base‘𝐽))
67 eqid 2761 . . . . . . . . . . 11 (.r‘𝐽) = (.r‘𝐽)
68 eqid 2761 . . . . . . . . . . 11 (0g‘𝐽) = (0g‘𝐽)
6965, 67, 68ringrz 20525 . . . . . . . . . 10 ((𝐽 ∈ Ring ∧ 1 ∈ (Base‘𝐽)) → ( 1 (.r‘𝐽)(0g‘𝐽)) = (0g‘𝐽))
704, 66, 69syl2anc2 597 . . . . . . . . 9 (𝜑 → ( 1 (.r‘𝐽)(0g‘𝐽)) = (0g‘𝐽))
7161, 64, 703eqtrd 2800 . . . . . . . 8 (𝜑 → ( 1 · (0g‘𝑅)) = (0g‘𝐽))
7255, 71opeq12d 4841 . . . . . . 7 (𝜑 → ⟨[(0g‘𝑅)] ∼ , ( 1 · (0g‘𝑅))⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
73 opex 5432 . . . . . . . 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 5432 . . . . . . . . . 10 ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ V
7776elsn 4599 . . . . . . . . 9 (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} ↔ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ = ⟨(0g‘𝑄), (0g‘𝐽)⟩)
7812ovexi 7454 . . . . . . . . . . 11 ∼ ∈ V
79 ecexg 8721 . . . . . . . . . . 11 ( ∼ ∈ V → [𝑎] ∼ ∈ V)
8078, 79ax-mp 5 . . . . . . . . . 10 [𝑎] ∼ ∈ V
81 ovex 7453 . . . . . . . . . 10 ( 1 · 𝑎) ∈ V
8280, 81opth 5445 . . . . . . . . 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 21590 . . . . . . . 8 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (([𝑎] ∼ = (0g‘𝑄) ∧ ( 1 · 𝑎) = (0g‘𝐽)) → 𝑎 = (0g‘𝑅)))
8583, 84biimtrid 245 . . . . . . 7 ((𝜑 ∧ 𝑎 ∈ 𝐵) → (⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩} → 𝑎 = (0g‘𝑅)))
8685imp 412 . . . . . 6 (((𝜑 ∧ 𝑎 ∈ 𝐵) ∧ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}) → 𝑎 = (0g‘𝑅))
8745, 51, 75, 86rabeqsnd 4630 . . . . 5 (𝜑 → {𝑎 ∈ 𝐵 ∣ ⟨[𝑎] ∼ , ( 1 · 𝑎)⟩ ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {(0g‘𝑅)})
8841, 87eqtrd 2796 . . . 4 (𝜑 → {𝑎 ∈ 𝐵 ∣ (𝐹‘𝑎) ∈ {⟨(0g‘𝑄), (0g‘𝐽)⟩}} = {(0g‘𝑅)})
8927, 34, 883eqtrd 2800 . . 3 (𝜑 → (◡𝐹 “ {(0g‘𝑃)}) = {(0g‘𝑅)})
901, 2, 3, 4, 35, 36, 37, 12, 11, 38, 23, 31rngqiprngghm 21595 . . . 4 (𝜑 → 𝐹 ∈ (𝑅 GrpHom 𝑃))
91 eqid 2761 . . . . 5 (Base‘𝑃) = (Base‘𝑃)
92 eqid 2761 . . . . 5 (0g‘𝑃) = (0g‘𝑃)
9335, 91, 49, 92kerf1ghm 19461 . . . 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 2762 . . 3 (𝜑 → 𝐹 = 𝐹)
97 eqidd 2762 . . 3 (𝜑 → 𝐵 = 𝐵)
981, 2, 3, 4, 35, 36, 37, 12, 11, 38, 23rngqipbas 21591 . . 3 (𝜑 → (Base‘𝑃) = (𝐶 × 𝐼))
9996, 97, 98f1eq123d 6816 . 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 2145  {crab 3413  Vcvv 3451   ⊆ wss 3899  {csn 4584  ⟨cop 4590   ↦ cmpt 5186   × cxp 5649  ◡ccnv 5650   “ cima 5654   Fn wfn 6533  –1-1→wf1 6535  ‘cfv 6538  (class class class)co 7420  [cec 8715  Basecbs 17387   ↾s cress 17408  .rcmulr 17429  0gc0g 17610   /s cqus 17677   ×s cxps 17678  Mndcmnd 18923  Grpcgrp 19144  SubGrpcsubg 19330  NrmSGrpcnsg 19331   ~QG cqg 19332   GrpHom cghm 19427  Rngcrng 20374  1rcur 20407  Ringcrg 20459  2Idealc2idl 21542
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 1943  ax-6 2000  ax-7 2041  ax-8 2147  ax-9 2155  ax-10 2178  ax-11 2194  ax-12 2213  ax-ext 2733  ax-rep 5232  ax-sep 5249  ax-nul 5260  ax-pow 5327  ax-pr 5391  ax-un 7751  ax-cnex 11256  ax-resscn 11257  ax-1cn 11258  ax-icn 11259  ax-addcl 11260  ax-addrcl 11261  ax-mulcl 11262  ax-mulrcl 11263  ax-mulcom 11264  ax-addass 11265  ax-mulass 11266  ax-distr 11267  ax-i2m1 11268  ax-1ne0 11269  ax-1rid 11270  ax-rnegex 11271  ax-rrecex 11272  ax-cnre 11273  ax-pre-lttri 11274  ax-pre-lttrn 11275  ax-pre-ltadd 11276  ax-pre-mulgt0 11277
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 2100  df-mo 2565  df-eu 2595  df-clab 2740  df-cleq 2753  df-clel 2836  df-nfc 2910  df-ne 2957  df-nel 3063  df-ral 3078  df-rex 3088  df-rmo 3366  df-reu 3367  df-rab 3414  df-v 3453  df-sbc 3740  df-csb 3848  df-dif 3902  df-un 3904  df-in 3906  df-ss 3916  df-pss 3919  df-nul 4280  df-if 4483  df-pw 4559  df-sn 4585  df-pr 4587  df-tp 4589  df-op 4591  df-uni 4868  df-iun 4953  df-br 5104  df-opab 5168  df-mpt 5187  df-tr 5213  df-id 5546  df-eprel 5551  df-po 5559  df-so 5560  df-fr 5604  df-we 5606  df-xp 5657  df-rel 5658  df-cnv 5659  df-co 5660  df-dm 5661  df-rn 5662  df-res 5663  df-ima 5664  df-pred 6304  df-ord 6365  df-on 6366  df-lim 6367  df-suc 6368  df-iota 6494  df-fun 6540  df-fn 6541  df-f 6542  df-f1 6543  df-fo 6544  df-f1o 6545  df-fv 6546  df-riota 7377  df-ov 7423  df-oprab 7424  df-mpo 7425  df-om 7878  df-1st 8001  df-2nd 8002  df-tpos 8243  df-frecs 8299  df-wrecs 8330  df-recs 8379  df-rdg 8418  df-1o 8476  df-2o 8477  df-er 8717  df-ec 8719  df-qs 8723  df-map 8849  df-ixp 8926  df-en 8974  df-dom 8975  df-sdom 8976  df-fin 8977  df-sup 9434  df-inf 9435  df-pnf 11345  df-mnf 11346  df-xr 11347  df-ltxr 11348  df-le 11349  df-sub 11543  df-neg 11544  df-nn 12336  df-2 12405  df-3 12406  df-4 12407  df-5 12408  df-6 12409  df-7 12410  df-8 12411  df-9 12412  df-n0 12607  df-z 12694  df-dec 12815  df-uz 12966  df-fz 13640  df-struct 17325  df-sets 17342  df-slot 17360  df-ndx 17372  df-base 17388  df-ress 17409  df-plusg 17441  df-mulr 17442  df-sca 17444  df-vsca 17445  df-ip 17446  df-tset 17447  df-ple 17448  df-ds 17450  df-hom 17452  df-cco 17453  df-0g 17612  df-prds 17618  df-imas 17680  df-qus 17681  df-xps 17682  df-mgm 18816  df-sgrp 18908  df-mnd 18924  df-grp 19147  df-minusg 19148  df-sbg 19149  df-subg 19333  df-nsg 19334  df-eqg 19335  df-ghm 19428  df-cmn 19996  df-abl 19997  df-mgp 20361  df-rng 20375  df-ur 20408  df-ring 20461  df-oppr 20567  df-dvdsr 20587  df-unit 20588  df-invr 20618  df-subrng 20798  df-lss 21207  df-sra 21448  df-rgmod 21449  df-lidl 21486  df-2idl 21543
This theorem is used by:  rngqiprngim  21600
  Copyright terms: Public domain W3C validator