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

Theorem zrrnghm 20788
Description: The constant mapping to zero is a non-unital ring homomorphism from the zero ring to any non-unital ring. (Contributed by AV, 17-Apr-2020.)
Hypotheses
Ref Expression
zrrnghm.b 𝐵 = (Base‘𝑇)
zrrnghm.0 0 = (0g‘𝑆)
zrrnghm.h 𝐻 = (𝑥 ∈ 𝐵 ↦ 0 )
Assertion
Ref Expression
zrrnghm ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝐻 ∈ (𝑇 RngHom 𝑆))
Distinct variable groups:   𝑥,𝐵   𝑥,𝑆   𝑥,𝑇   𝑥, 0
Allowed substitution hint:   𝐻(𝑥)

Proof of Theorem zrrnghm
Dummy variables 𝑎 𝑐 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 eldifi 4078 . . . . 5 (𝑇 ∈ (Ring ∖ NzRing) → 𝑇 ∈ Ring)
2 ringrng 20514 . . . . 5 (𝑇 ∈ Ring → 𝑇 ∈ Rng)
31, 2syl 18 . . . 4 (𝑇 ∈ (Ring ∖ NzRing) → 𝑇 ∈ Rng)
43anim1i 627 . . 3 ((𝑇 ∈ (Ring ∖ NzRing) ∧ 𝑆 ∈ Rng) → (𝑇 ∈ Rng ∧ 𝑆 ∈ Rng))
54ancoms 464 . 2 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → (𝑇 ∈ Rng ∧ 𝑆 ∈ Rng))
6 rngabl 20377 . . . . . 6 (𝑆 ∈ Rng → 𝑆 ∈ Abel)
7 ablgrp 19999 . . . . . 6 (𝑆 ∈ Abel → 𝑆 ∈ Grp)
86, 7syl 18 . . . . 5 (𝑆 ∈ Rng → 𝑆 ∈ Grp)
98adantr 486 . . . 4 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝑆 ∈ Grp)
10 ringgrp 20464 . . . . . 6 (𝑇 ∈ Ring → 𝑇 ∈ Grp)
111, 10syl 18 . . . . 5 (𝑇 ∈ (Ring ∖ NzRing) → 𝑇 ∈ Grp)
1211adantl 487 . . . 4 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝑇 ∈ Grp)
13 zrrnghm.b . . . . . 6 𝐵 = (Base‘𝑇)
14 eqid 2761 . . . . . 6 (0g‘𝑇) = (0g‘𝑇)
1513, 140ringbas 20779 . . . . 5 (𝑇 ∈ (Ring ∖ NzRing) → 𝐵 = {(0g‘𝑇)})
1615adantl 487 . . . 4 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝐵 = {(0g‘𝑇)})
17 zrrnghm.0 . . . . 5 0 = (0g‘𝑆)
18 zrrnghm.h . . . . 5 𝐻 = (𝑥 ∈ 𝐵 ↦ 0 )
1913, 17, 18, 14c0snghm 20694 . . . 4 ((𝑆 ∈ Grp ∧ 𝑇 ∈ Grp ∧ 𝐵 = {(0g‘𝑇)}) → 𝐻 ∈ (𝑇 GrpHom 𝑆))
209, 12, 16, 19syl3anc 1398 . . 3 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝐻 ∈ (𝑇 GrpHom 𝑆))
2118a1i 11 . . . . . . . 8 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → 𝐻 = (𝑥 ∈ 𝐵 ↦ 0 ))
22 eqidd 2762 . . . . . . . 8 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ 𝑥 = (0g‘𝑇)) → 0 = 0 )
2313, 14ring0cl 20496 . . . . . . . . . 10 (𝑇 ∈ Ring → (0g‘𝑇) ∈ 𝐵)
241, 23syl 18 . . . . . . . . 9 (𝑇 ∈ (Ring ∖ NzRing) → (0g‘𝑇) ∈ 𝐵)
2524ad2antlr 740 . . . . . . . 8 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → (0g‘𝑇) ∈ 𝐵)
2617fvexi 6899 . . . . . . . . 9 0 ∈ V
2726a1i 11 . . . . . . . 8 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → 0 ∈ V)
2821, 22, 25, 27fvmptd 7001 . . . . . . 7 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → (𝐻‘(0g‘𝑇)) = 0 )
29 eqid 2761 . . . . . . . . . . . . . 14 (Base‘𝑆) = (Base‘𝑆)
3029, 17grpidcl 19176 . . . . . . . . . . . . 13 (𝑆 ∈ Grp → 0 ∈ (Base‘𝑆))
318, 30syl 18 . . . . . . . . . . . 12 (𝑆 ∈ Rng → 0 ∈ (Base‘𝑆))
32 eqid 2761 . . . . . . . . . . . . 13 (.r‘𝑆) = (.r‘𝑆)
3329, 32, 17rnglz 20387 . . . . . . . . . . . 12 ((𝑆 ∈ Rng ∧ 0 ∈ (Base‘𝑆)) → ( 0 (.r‘𝑆) 0 ) = 0 )
3431, 33mpdan 700 . . . . . . . . . . 11 (𝑆 ∈ Rng → ( 0 (.r‘𝑆) 0 ) = 0 )
3534adantr 486 . . . . . . . . . 10 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → ( 0 (.r‘𝑆) 0 ) = 0 )
3635adantr 486 . . . . . . . . 9 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → ( 0 (.r‘𝑆) 0 ) = 0 )
3736adantr 486 . . . . . . . 8 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → ( 0 (.r‘𝑆) 0 ) = 0 )
38 simpr 490 . . . . . . . . 9 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → (𝐻‘(0g‘𝑇)) = 0 )
3938, 38oveq12d 7438 . . . . . . . 8 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇))) = ( 0 (.r‘𝑆) 0 ))
40 eqid 2761 . . . . . . . . . . . . . 14 (.r‘𝑇) = (.r‘𝑇)
4113, 40, 14ringlz 20524 . . . . . . . . . . . . 13 ((𝑇 ∈ Ring ∧ (0g‘𝑇) ∈ 𝐵) → ((0g‘𝑇)(.r‘𝑇)(0g‘𝑇)) = (0g‘𝑇))
421, 23, 41syl2anc2 597 . . . . . . . . . . . 12 (𝑇 ∈ (Ring ∖ NzRing) → ((0g‘𝑇)(.r‘𝑇)(0g‘𝑇)) = (0g‘𝑇))
4342ad2antlr 740 . . . . . . . . . . 11 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → ((0g‘𝑇)(.r‘𝑇)(0g‘𝑇)) = (0g‘𝑇))
4443adantr 486 . . . . . . . . . 10 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → ((0g‘𝑇)(.r‘𝑇)(0g‘𝑇)) = (0g‘𝑇))
4544fveq2d 6889 . . . . . . . . 9 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = (𝐻‘(0g‘𝑇)))
4645, 38eqtrd 2796 . . . . . . . 8 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = 0 )
4737, 39, 463eqtr4rd 2807 . . . . . . 7 ((((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) ∧ (𝐻‘(0g‘𝑇)) = 0 ) → (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇))))
4828, 47mpdan 700 . . . . . 6 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇))))
4923, 23jca 521 . . . . . . . . 9 (𝑇 ∈ Ring → ((0g‘𝑇) ∈ 𝐵 ∧ (0g‘𝑇) ∈ 𝐵))
501, 49syl 18 . . . . . . . 8 (𝑇 ∈ (Ring ∖ NzRing) → ((0g‘𝑇) ∈ 𝐵 ∧ (0g‘𝑇) ∈ 𝐵))
5150ad2antlr 740 . . . . . . 7 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → ((0g‘𝑇) ∈ 𝐵 ∧ (0g‘𝑇) ∈ 𝐵))
52 fvoveq1 7443 . . . . . . . . 9 (𝑎 = (0g‘𝑇) → (𝐻‘(𝑎(.r‘𝑇)𝑐)) = (𝐻‘((0g‘𝑇)(.r‘𝑇)𝑐)))
53 fveq2 6885 . . . . . . . . . 10 (𝑎 = (0g‘𝑇) → (𝐻‘𝑎) = (𝐻‘(0g‘𝑇)))
5453oveq1d 7435 . . . . . . . . 9 (𝑎 = (0g‘𝑇) → ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘𝑐)))
5552, 54eqeq12d 2777 . . . . . . . 8 (𝑎 = (0g‘𝑇) → ((𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ (𝐻‘((0g‘𝑇)(.r‘𝑇)𝑐)) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘𝑐))))
56 oveq2 7428 . . . . . . . . . 10 (𝑐 = (0g‘𝑇) → ((0g‘𝑇)(.r‘𝑇)𝑐) = ((0g‘𝑇)(.r‘𝑇)(0g‘𝑇)))
5756fveq2d 6889 . . . . . . . . 9 (𝑐 = (0g‘𝑇) → (𝐻‘((0g‘𝑇)(.r‘𝑇)𝑐)) = (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))))
58 fveq2 6885 . . . . . . . . . 10 (𝑐 = (0g‘𝑇) → (𝐻‘𝑐) = (𝐻‘(0g‘𝑇)))
5958oveq2d 7436 . . . . . . . . 9 (𝑐 = (0g‘𝑇) → ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘𝑐)) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇))))
6057, 59eqeq12d 2777 . . . . . . . 8 (𝑐 = (0g‘𝑇) → ((𝐻‘((0g‘𝑇)(.r‘𝑇)𝑐)) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘𝑐)) ↔ (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇)))))
6155, 602ralsng 4639 . . . . . . 7 (((0g‘𝑇) ∈ 𝐵 ∧ (0g‘𝑇) ∈ 𝐵) → (∀𝑎 ∈ {(0g‘𝑇)}∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇)))))
6251, 61syl 18 . . . . . 6 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → (∀𝑎 ∈ {(0g‘𝑇)}∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ (𝐻‘((0g‘𝑇)(.r‘𝑇)(0g‘𝑇))) = ((𝐻‘(0g‘𝑇))(.r‘𝑆)(𝐻‘(0g‘𝑇)))))
6348, 62mpbird 260 . . . . 5 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → ∀𝑎 ∈ {(0g‘𝑇)}∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)))
64 raleq 3317 . . . . . . 7 (𝐵 = {(0g‘𝑇)} → (∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ ∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐))))
6564raleqbi1dv 3330 . . . . . 6 (𝐵 = {(0g‘𝑇)} → (∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ ∀𝑎 ∈ {(0g‘𝑇)}∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐))))
6665adantl 487 . . . . 5 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → (∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)) ↔ ∀𝑎 ∈ {(0g‘𝑇)}∀𝑐 ∈ {(0g‘𝑇)} (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐))))
6763, 66mpbird 260 . . . 4 (((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) ∧ 𝐵 = {(0g‘𝑇)}) → ∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)))
6816, 67mpdan 700 . . 3 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → ∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)))
6920, 68jca 521 . 2 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → (𝐻 ∈ (𝑇 GrpHom 𝑆) ∧ ∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐))))
7013, 40, 32isrnghm 20671 . 2 (𝐻 ∈ (𝑇 RngHom 𝑆) ↔ ((𝑇 ∈ Rng ∧ 𝑆 ∈ Rng) ∧ (𝐻 ∈ (𝑇 GrpHom 𝑆) ∧ ∀𝑎 ∈ 𝐵 ∀𝑐 ∈ 𝐵 (𝐻‘(𝑎(.r‘𝑇)𝑐)) = ((𝐻‘𝑎)(.r‘𝑆)(𝐻‘𝑐)))))
715, 69, 70sylanbrc 595 1 ((𝑆 ∈ Rng ∧ 𝑇 ∈ (Ring ∖ NzRing)) → 𝐻 ∈ (𝑇 RngHom 𝑆))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ↔ wb 209   ∧ wa 401   = wceq 1570   ∈ wcel 2145  ∀wral 3077  Vcvv 3451   ∖ cdif 3896  {csn 4584   ↦ cmpt 5186  ‘cfv 6538  (class class class)co 7420  Basecbs 17387  .rcmulr 17429  0gc0g 17610  Grpcgrp 19144   GrpHom cghm 19427  Abelcabl 19995  Rngcrng 20374  Ringcrg 20459   RngHom crnghm 20664  NzRingcnzr 20762
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-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-op 4591  df-uni 4868  df-int 4908  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-frecs 8299  df-wrecs 8330  df-recs 8379  df-rdg 8418  df-1o 8476  df-oadd 8480  df-er 8717  df-map 8849  df-en 8974  df-dom 8975  df-sdom 8976  df-fin 8977  df-dju 9982  df-card 10020  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-n0 12607  df-xnn0 12680  df-z 12694  df-uz 12966  df-fz 13640  df-hash 14475  df-sets 17342  df-slot 17360  df-ndx 17372  df-base 17388  df-plusg 17441  df-0g 17612  df-mgm 18816  df-mgmhm 18881  df-sgrp 18908  df-mnd 18924  df-mhm 18978  df-grp 19147  df-minusg 19148  df-ghm 19428  df-cmn 19996  df-abl 19997  df-mgp 20361  df-rng 20375  df-ur 20408  df-ring 20461  df-rnghm 20666  df-nzr 20763
This theorem is used by:  zrinitorngc  20894
  Copyright terms: Public domain W3C validator