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

Theorem metsscmetcld 25435
Description: A complete subspace of a metric space is closed in the parent space. Formerly part of proof for cmetss 25436. (Contributed by NM, 28-Jan-2008.) (Revised by Mario Carneiro, 15-Oct-2015.) (Revised by AV, 9-Oct-2022.)
Hypothesis
Ref Expression
metsscmetcld.j 𝐽 = (MetOpen‘𝐷)
Assertion
Ref Expression
metsscmetcld ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 ∈ (Clsd‘𝐽))

Proof of Theorem metsscmetcld
Dummy variables 𝑥 𝑓 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 metxmet 24452 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝐷 ∈ (∞Met‘𝑋))
21adantr 485 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐷 ∈ (∞Met‘𝑋))
3 metsscmetcld.j . . . . . . 7 𝐽 = (MetOpen‘𝐷)
43mopntopon 24557 . . . . . 6 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ (TopOn‘𝑋))
52, 4syl 18 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ (TopOn‘𝑋))
6 resss 5991 . . . . . . 7 (𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷
7 dmss 5883 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷 → dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷)
8 dmss 5883 . . . . . . 7 (dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷 → dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷)
96, 7, 8mp2b 10 . . . . . 6 dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷
10 cmetmet 25406 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌))
11 metdmdm 24454 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
1210, 11syl 18 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
13 metdmdm 24454 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝑋 = dom dom 𝐷)
14 sseq12 3966 . . . . . . 7 ((𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)) ∧ 𝑋 = dom dom 𝐷) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
1512, 13, 14syl2anr 608 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
169, 15mpbiri 261 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌𝑋)
17 flimcls 24103 . . . . 5 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑌𝑋) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
185, 16, 17syl2anc 595 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
19 simprrr 793 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥 ∈ (𝐽 fLim 𝑓))
202adantr 485 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝐷 ∈ (∞Met‘𝑋))
213methaus 24638 . . . . . . . 8 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Haus)
22 hausflimi 24098 . . . . . . . 8 (𝐽 ∈ Haus → ∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓))
2320, 21, 223syl 19 . . . . . . 7 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓))
2420, 4syl 18 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝐽 ∈ (TopOn‘𝑋))
25 simprl 782 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑓 ∈ (Fil‘𝑋))
26 simprrl 792 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑌𝑓)
27 flimrest 24101 . . . . . . . . . . 11 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2824, 25, 26, 27syl3anc 1394 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2916adantr 485 . . . . . . . . . . . 12 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑌𝑋)
30 eqid 2765 . . . . . . . . . . . . 13 (𝐷 ↾ (𝑌 × 𝑌)) = (𝐷 ↾ (𝑌 × 𝑌))
31 eqid 2765 . . . . . . . . . . . . 13 (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌)))
3230, 3, 31metrest 24642 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑌𝑋) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3320, 29, 32syl2anc 595 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3433oveq1d 7415 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
3528, 34eqtr3d 2802 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
36 simplr 780 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌))
373flimcfil 25434 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑓 ∈ (CauFil‘𝐷))
3820, 19, 37syl2anc 595 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑓 ∈ (CauFil‘𝐷))
39 cfilres 25416 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4020, 25, 26, 39syl3anc 1394 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4138, 40mpbid 235 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌))))
4231cmetcvg 25405 . . . . . . . . . 10 (((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) ∧ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4336, 41, 42syl2anc 595 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4435, 43eqnetrd 3027 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅)
45 ndisj 4326 . . . . . . . 8 (((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅ ↔ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
4644, 45sylib 221 . . . . . . 7 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
47 mopick 2655 . . . . . . 7 ((∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓) ∧ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌)) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4823, 46, 47syl2anc 595 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4919, 48mpd 16 . . . . 5 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥𝑌)
5049rexlimdvaa 3167 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑥𝑌))
5118, 50sylbid 243 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) → 𝑥𝑌))
5251ssrdv 3945 . 2 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → ((cls‘𝐽)‘𝑌) ⊆ 𝑌)
533mopntop 24558 . . . 4 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Top)
542, 53syl 18 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ Top)
553mopnuni 24559 . . . . 5 (𝐷 ∈ (∞Met‘𝑋) → 𝑋 = 𝐽)
562, 55syl 18 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑋 = 𝐽)
5716, 56sseqtrd 3975 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 𝐽)
58 eqid 2765 . . . 4 𝐽 = 𝐽
5958iscld4 23183 . . 3 ((𝐽 ∈ Top ∧ 𝑌 𝐽) → (𝑌 ∈ (Clsd‘𝐽) ↔ ((cls‘𝐽)‘𝑌) ⊆ 𝑌))
6054, 57, 59syl2anc 595 . 2 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑌 ∈ (Clsd‘𝐽) ↔ ((cls‘𝐽)‘𝑌) ⊆ 𝑌))
6152, 60mpbird 260 1 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 ∈ (Clsd‘𝐽))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 209  wa 400   = wceq 1563  wex 1802  wcel 2145  ∃*wmo 2567  wne 2960  wrex 3089  cin 3906  wss 3907  c0 4288   cuni 4868   × cxp 5650  dom cdm 5652  cres 5654  cfv 6525  (class class class)co 7400  t crest 17463  ∞Metcxmet 21467  Metcmet 21468  MetOpencmopn 21472  Topctop 23011  TopOnctopon 23028  Clsdccld 23134  clsccl 23136  Hauscha 23426  Filcfil 23963   fLim cflim 24052  CauFilccfil 25372  CMetccmet 25374
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1818  ax-4 1832  ax-5 1933  ax-6 1990  ax-7 2031  ax-8 2147  ax-9 2155  ax-10 2178  ax-11 2194  ax-12 2215  ax-ext 2737  ax-rep 5232  ax-sep 5251  ax-nul 5261  ax-pow 5327  ax-pr 5395  ax-un 7722  ax-cnex 11144  ax-resscn 11145  ax-1cn 11146  ax-icn 11147  ax-addcl 11148  ax-addrcl 11149  ax-mulcl 11150  ax-mulrcl 11151  ax-mulcom 11152  ax-addass 11153  ax-mulass 11154  ax-distr 11155  ax-i2m1 11156  ax-1ne0 11157  ax-1rid 11158  ax-rnegex 11159  ax-rrecex 11160  ax-cnre 11161  ax-pre-lttri 11162  ax-pre-lttrn 11163  ax-pre-ltadd 11164  ax-pre-mulgt0 11165  ax-pre-sup 11166
This theorem depends on definitions:  df-bi 210  df-an 401  df-or 861  df-3or 1102  df-3an 1103  df-tru 1566  df-fal 1576  df-ex 1803  df-nf 1807  df-sb 2094  df-mo 2569  df-eu 2599  df-clab 2744  df-cleq 2757  df-clel 2840  df-nfc 2914  df-ne 2961  df-nel 3065  df-ral 3080  df-rex 3090  df-rmo 3370  df-reu 3371  df-rab 3418  df-v 3459  df-sbc 3748  df-csb 3856  df-dif 3910  df-un 3912  df-in 3914  df-ss 3924  df-pss 3927  df-nul 4289  df-if 4484  df-pw 4560  df-sn 4586  df-pr 4588  df-op 4592  df-uni 4869  df-int 4909  df-iun 4954  df-iin 4955  df-br 5106  df-opab 5168  df-mpt 5187  df-tr 5213  df-id 5547  df-eprel 5552  df-po 5560  df-so 5561  df-fr 5605  df-we 5607  df-xp 5658  df-rel 5659  df-cnv 5660  df-co 5661  df-dm 5662  df-rn 5663  df-res 5664  df-ima 5665  df-pred 6292  df-ord 6353  df-on 6354  df-lim 6355  df-suc 6356  df-iota 6481  df-fun 6527  df-fn 6528  df-f 6529  df-f1 6530  df-fo 6531  df-f1o 6532  df-fv 6533  df-riota 7357  df-ov 7403  df-oprab 7404  df-mpo 7405  df-om 7851  df-1st 7974  df-2nd 7975  df-frecs 8266  df-wrecs 8297  df-recs 8346  df-rdg 8385  df-1o 8441  df-2o 8442  df-er 8682  df-map 8814  df-en 8932  df-dom 8933  df-sdom 8934  df-fin 8935  df-fi 9359  df-sup 9390  df-inf 9391  df-pnf 11233  df-mnf 11234  df-xr 11235  df-ltxr 11236  df-le 11237  df-sub 11431  df-neg 11432  df-div 11860  df-nn 12225  df-2 12294  df-n0 12496  df-z 12583  df-uz 12854  df-q 12964  df-rp 13008  df-xneg 13128  df-xadd 13129  df-xmul 13130  df-ico 13369  df-icc 13370  df-rest 17465  df-topgen 17486  df-psmet 21474  df-xmet 21475  df-met 21476  df-bl 21477  df-mopn 21478  df-fbas 21479  df-fg 21480  df-top 23012  df-topon 23029  df-bases 23064  df-cld 23137  df-ntr 23138  df-cls 23139  df-nei 23216  df-haus 23433  df-fil 23964  df-flim 24057  df-cfil 25375  df-cmet 25377
This theorem is referenced by:  cmetss  25436  cmssmscld  25470
  Copyright terms: Public domain W3C validator