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

Theorem dprdsn 20253
Description: A singleton family is an internal direct product, the product of which is the given subgroup. (Contributed by Mario Carneiro, 25-Apr-2016.)
Assertion
Ref Expression
dprdsn ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → (𝐺dom DProd {⟨𝐴, 𝑆⟩} ∧ (𝐺 DProd {⟨𝐴, 𝑆⟩}) = 𝑆))

Proof of Theorem dprdsn
Dummy variables 𝑥 𝑦 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 eqid 2760 . . 3 (Cntz‘𝐺) = (Cntz‘𝐺)
2 eqid 2760 . . 3 (0g‘𝐺) = (0g‘𝐺)
3 eqid 2760 . . 3 (mrCls‘(SubGrp‘𝐺)) = (mrCls‘(SubGrp‘𝐺))
4 subgrcl 19342 . . . 4 (𝑆 ∈ (SubGrp‘𝐺) → 𝐺 ∈ Grp)
54adantl 487 . . 3 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → 𝐺 ∈ Grp)
6 snex 5396 . . . 4 {𝐴} ∈ V
76a1i 11 . . 3 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → {𝐴} ∈ V)
8 f1osng 6867 . . . . 5 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → {⟨𝐴, 𝑆⟩}:{𝐴}–1-1-onto→{𝑆})
9 f1of 6824 . . . . 5 ({⟨𝐴, 𝑆⟩}:{𝐴}–1-1-onto→{𝑆} → {⟨𝐴, 𝑆⟩}:{𝐴}⟶{𝑆})
108, 9syl 18 . . . 4 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → {⟨𝐴, 𝑆⟩}:{𝐴}⟶{𝑆})
11 simpr 490 . . . . 5 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → 𝑆 ∈ (SubGrp‘𝐺))
1211snssd 4746 . . . 4 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → {𝑆} ⊆ (SubGrp‘𝐺))
1310, 12fssd 6727 . . 3 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → {⟨𝐴, 𝑆⟩}:{𝐴}⟶(SubGrp‘𝐺))
14 simpr1 1213 . . . . . 6 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑥 ∈ {𝐴})
15 elsni 4600 . . . . . 6 (𝑥 ∈ {𝐴} → 𝑥 = 𝐴)
1614, 15syl 18 . . . . 5 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑥 = 𝐴)
17 simpr2 1214 . . . . . 6 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑦 ∈ {𝐴})
18 elsni 4600 . . . . . 6 (𝑦 ∈ {𝐴} → 𝑦 = 𝐴)
1917, 18syl 18 . . . . 5 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑦 = 𝐴)
2016, 19eqtr4d 2798 . . . 4 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑥 = 𝑦)
21 simpr3 1215 . . . 4 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → 𝑥 ≠ 𝑦)
2220, 21pm2.21ddne 3039 . . 3 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ (𝑥 ∈ {𝐴} ∧ 𝑦 ∈ {𝐴} ∧ 𝑥 ≠ 𝑦)) → ({⟨𝐴, 𝑆⟩}‘𝑥) ⊆ ((Cntz‘𝐺)‘({⟨𝐴, 𝑆⟩}‘𝑦)))
235adantr 486 . . . . . . . 8 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → 𝐺 ∈ Grp)
24 eqid 2760 . . . . . . . . 9 (Base‘𝐺) = (Base‘𝐺)
2524subgacs 19372 . . . . . . . 8 (𝐺 ∈ Grp → (SubGrp‘𝐺) ∈ (ACS‘(Base‘𝐺)))
26 acsmre 17827 . . . . . . . 8 ((SubGrp‘𝐺) ∈ (ACS‘(Base‘𝐺)) → (SubGrp‘𝐺) ∈ (Moore‘(Base‘𝐺)))
2723, 25, 263syl 19 . . . . . . 7 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → (SubGrp‘𝐺) ∈ (Moore‘(Base‘𝐺)))
2815adantl 487 . . . . . . . . . . . . . . 15 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → 𝑥 = 𝐴)
2928sneqd 4595 . . . . . . . . . . . . . 14 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → {𝑥} = {𝐴})
3029difeq2d 4063 . . . . . . . . . . . . 13 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ({𝐴} ∖ {𝑥}) = ({𝐴} ∖ {𝐴}))
31 difid 4324 . . . . . . . . . . . . 13 ({𝐴} ∖ {𝐴}) = ∅
3230, 31eqtrdi 2811 . . . . . . . . . . . 12 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ({𝐴} ∖ {𝑥}) = ∅)
3332imaeq2d 6051 . . . . . . . . . . 11 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) = ({⟨𝐴, 𝑆⟩} “ ∅))
34 ima0 6074 . . . . . . . . . . 11 ({⟨𝐴, 𝑆⟩} “ ∅) = ∅
3533, 34eqtrdi 2811 . . . . . . . . . 10 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) = ∅)
3635unieqd 4879 . . . . . . . . 9 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) = ∪ ∅)
37 uni0 4895 . . . . . . . . 9 ∪ ∅ = ∅
3836, 37eqtrdi 2811 . . . . . . . 8 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) = ∅)
39 0ss 4349 . . . . . . . . 9 ∅ ⊆ {(0g‘𝐺)}
4039a1i 11 . . . . . . . 8 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ∅ ⊆ {(0g‘𝐺)})
4138, 40eqsstrd 3942 . . . . . . 7 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) ⊆ {(0g‘𝐺)})
4220subg 19363 . . . . . . . 8 (𝐺 ∈ Grp → {(0g‘𝐺)} ∈ (SubGrp‘𝐺))
4323, 42syl 18 . . . . . . 7 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → {(0g‘𝐺)} ∈ (SubGrp‘𝐺))
443mrcsscl 17795 . . . . . . 7 (((SubGrp‘𝐺) ∈ (Moore‘(Base‘𝐺)) ∧ ∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})) ⊆ {(0g‘𝐺)} ∧ {(0g‘𝐺)} ∈ (SubGrp‘𝐺)) → ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))) ⊆ {(0g‘𝐺)})
4527, 41, 43, 44syl3anc 1398 . . . . . 6 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))) ⊆ {(0g‘𝐺)})
462subg0cl 19345 . . . . . . . . 9 (𝑆 ∈ (SubGrp‘𝐺) → (0g‘𝐺) ∈ 𝑆)
4746ad2antlr 740 . . . . . . . 8 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → (0g‘𝐺) ∈ 𝑆)
4815fveq2d 6889 . . . . . . . . 9 (𝑥 ∈ {𝐴} → ({⟨𝐴, 𝑆⟩}‘𝑥) = ({⟨𝐴, 𝑆⟩}‘𝐴))
49 fvsng 7185 . . . . . . . . 9 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ({⟨𝐴, 𝑆⟩}‘𝐴) = 𝑆)
5048, 49sylan9eqr 2817 . . . . . . . 8 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ({⟨𝐴, 𝑆⟩}‘𝑥) = 𝑆)
5147, 50eleqtrrd 2863 . . . . . . 7 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → (0g‘𝐺) ∈ ({⟨𝐴, 𝑆⟩}‘𝑥))
5251snssd 4746 . . . . . 6 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → {(0g‘𝐺)} ⊆ ({⟨𝐴, 𝑆⟩}‘𝑥))
5345, 52sstrd 3918 . . . . 5 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))) ⊆ ({⟨𝐴, 𝑆⟩}‘𝑥))
54 sseqin2 4120 . . . . 5 (((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))) ⊆ ({⟨𝐴, 𝑆⟩}‘𝑥) ↔ (({⟨𝐴, 𝑆⟩}‘𝑥) ∩ ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})))) = ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))))
5553, 54sylib 221 . . . 4 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → (({⟨𝐴, 𝑆⟩}‘𝑥) ∩ ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})))) = ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥}))))
5655, 45eqsstrd 3942 . . 3 (((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) ∧ 𝑥 ∈ {𝐴}) → (({⟨𝐴, 𝑆⟩}‘𝑥) ∩ ((mrCls‘(SubGrp‘𝐺))‘∪ ({⟨𝐴, 𝑆⟩} “ ({𝐴} ∖ {𝑥})))) ⊆ {(0g‘𝐺)})
571, 2, 3, 5, 7, 13, 22, 56dmdprdd 20216 . 2 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → 𝐺dom DProd {⟨𝐴, 𝑆⟩})
583dprdspan 20244 . . . 4 (𝐺dom DProd {⟨𝐴, 𝑆⟩} → (𝐺 DProd {⟨𝐴, 𝑆⟩}) = ((mrCls‘(SubGrp‘𝐺))‘∪ ran {⟨𝐴, 𝑆⟩}))
5957, 58syl 18 . . 3 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → (𝐺 DProd {⟨𝐴, 𝑆⟩}) = ((mrCls‘(SubGrp‘𝐺))‘∪ ran {⟨𝐴, 𝑆⟩}))
60 rnsnopg 6222 . . . . . . . 8 (𝐴 ∈ 𝑉 → ran {⟨𝐴, 𝑆⟩} = {𝑆})
6160adantr 486 . . . . . . 7 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ran {⟨𝐴, 𝑆⟩} = {𝑆})
6261unieqd 4879 . . . . . 6 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ∪ ran {⟨𝐴, 𝑆⟩} = ∪ {𝑆})
63 unisng 4884 . . . . . . 7 (𝑆 ∈ (SubGrp‘𝐺) → ∪ {𝑆} = 𝑆)
6463adantl 487 . . . . . 6 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ∪ {𝑆} = 𝑆)
6562, 64eqtrd 2795 . . . . 5 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ∪ ran {⟨𝐴, 𝑆⟩} = 𝑆)
6665fveq2d 6889 . . . 4 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ((mrCls‘(SubGrp‘𝐺))‘∪ ran {⟨𝐴, 𝑆⟩}) = ((mrCls‘(SubGrp‘𝐺))‘𝑆))
675, 25, 263syl 19 . . . . 5 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → (SubGrp‘𝐺) ∈ (Moore‘(Base‘𝐺)))
683mrcid 17788 . . . . 5 (((SubGrp‘𝐺) ∈ (Moore‘(Base‘𝐺)) ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ((mrCls‘(SubGrp‘𝐺))‘𝑆) = 𝑆)
6967, 68sylancom 600 . . . 4 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ((mrCls‘(SubGrp‘𝐺))‘𝑆) = 𝑆)
7066, 69eqtrd 2795 . . 3 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → ((mrCls‘(SubGrp‘𝐺))‘∪ ran {⟨𝐴, 𝑆⟩}) = 𝑆)
7159, 70eqtrd 2795 . 2 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → (𝐺 DProd {⟨𝐴, 𝑆⟩}) = 𝑆)
7257, 71jca 521 1 ((𝐴 ∈ 𝑉 ∧ 𝑆 ∈ (SubGrp‘𝐺)) → (𝐺dom DProd {⟨𝐴, 𝑆⟩} ∧ (𝐺 DProd {⟨𝐴, 𝑆⟩}) = 𝑆))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ∧ wa 401   ∧ w3a 1103   = wceq 1569   ∈ wcel 2144   ≠ wne 2955  Vcvv 3450   ⊆ wss 3895   ∖ cdif 4045   ∩ cin 4089  ∅c0 4278  {csn 4583  ⟨cop 4589  ∪ cuni 4866   class class class wbr 5102  dom cdm 5650  ran crn 5651   “ cima 5653  ⟶wf 6534  –1-1-onto→wf1o 6537  ‘cfv 6538  (class class class)co 7420  Basecbs 17388  0gc0g 17611  Moorecmre 17753  mrClscmrc 17754  ACScacs 17756  Grpcgrp 19145  SubGrpcsubg 19331  Cntzccntz 19530   DProd cdprd 20210
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 1942  ax-6 1999  ax-7 2040  ax-8 2146  ax-9 2154  ax-10 2177  ax-11 2193  ax-12 2212  ax-ext 2732  ax-rep 5231  ax-sep 5248  ax-nul 5259  ax-pow 5326  ax-pr 5390  ax-un 7751  ax-cnex 11257  ax-resscn 11258  ax-1cn 11259  ax-icn 11260  ax-addcl 11261  ax-addrcl 11262  ax-mulcl 11263  ax-mulrcl 11264  ax-mulcom 11265  ax-addass 11266  ax-mulass 11267  ax-distr 11268  ax-i2m1 11269  ax-1ne0 11270  ax-1rid 11271  ax-rnegex 11272  ax-rrecex 11273  ax-cnre 11274  ax-pre-lttri 11275  ax-pre-lttrn 11276  ax-pre-ltadd 11277  ax-pre-mulgt0 11278
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 2099  df-mo 2564  df-eu 2594  df-clab 2739  df-cleq 2752  df-clel 2835  df-nfc 2909  df-ne 2956  df-nel 3062  df-ral 3077  df-rex 3087  df-rmo 3365  df-reu 3366  df-rab 3413  df-v 3452  df-sbc 3739  df-csb 3847  df-ss 3896  df-pss 4014  df-dif 4047  df-in 4091  df-un 4151  df-nul 4279  df-if 4482  df-pw 4558  df-sn 4584  df-pr 4586  df-op 4590  df-uni 4867  df-int 4907  df-iun 4952  df-iin 4953  df-br 5103  df-opab 5167  df-mpt 5186  df-tr 5212  df-id 5545  df-eprel 5550  df-po 5558  df-so 5559  df-fr 5603  df-se 5604  df-we 5605  df-xp 5656  df-rel 5657  df-cnv 5658  df-co 5659  df-dm 5660  df-rn 5661  df-res 5662  df-ima 5663  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-isom 6547  df-riota 7377  df-ov 7423  df-oprab 7424  df-mpo 7425  df-of 7693  df-om 7878  df-1st 8001  df-2nd 8002  df-supp 8178  df-tpos 8244  df-frecs 8300  df-wrecs 8331  df-recs 8380  df-rdg 8419  df-1o 8477  df-2o 8478  df-er 8718  df-map 8850  df-ixp 8927  df-en 8975  df-dom 8976  df-sdom 8977  df-fin 8978  df-fsupp 9355  df-oi 9505  df-card 10021  df-pnf 11346  df-mnf 11347  df-xr 11348  df-ltxr 11349  df-le 11350  df-sub 11544  df-neg 11545  df-nn 12337  df-2 12406  df-n0 12608  df-z 12695  df-uz 12967  df-fz 13641  df-fzo 13790  df-seq 14146  df-hash 14476  df-sets 17343  df-slot 17361  df-ndx 17373  df-base 17389  df-ress 17410  df-plusg 17442  df-0g 17613  df-gsum 17614  df-mre 17757  df-mrc 17758  df-acs 17760  df-mgm 18817  df-sgrp 18909  df-mnd 18925  df-mhm 18979  df-submnd 18980  df-grp 19148  df-minusg 19149  df-sbg 19150  df-mulg 19279  df-subg 19334  df-ghm 19429  df-gim 19474  df-cntz 19532  df-oppg 19561  df-cmn 19997  df-dprd 20212
This theorem is used by:  dprd2da  20259  dmdprdpr  20266  dprdpr  20267  dpjlem  20268  pgpfaclem1  20298
  Copyright terms: Public domain W3C validator