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

Theorem metsscmetcld 25368
Description: A complete subspace of a metric space is closed in the parent space. Formerly part of proof for cmetss 25369. (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 24365 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝐷 ∈ (∞Met‘𝑋))
21adantr 480 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐷 ∈ (∞Met‘𝑋))
3 metsscmetcld.j . . . . . . 7 𝐽 = (MetOpen‘𝐷)
43mopntopon 24470 . . . . . 6 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ (TopOn‘𝑋))
52, 4syl 17 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ (TopOn‘𝑋))
6 resss 6031 . . . . . . 7 (𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷
7 dmss 5927 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷 → dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷)
8 dmss 5927 . . . . . . 7 (dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷 → dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷)
96, 7, 8mp2b 10 . . . . . 6 dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷
10 cmetmet 25339 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌))
11 metdmdm 24367 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
1210, 11syl 17 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
13 metdmdm 24367 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝑋 = dom dom 𝐷)
14 sseq12 4036 . . . . . . 7 ((𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)) ∧ 𝑋 = dom dom 𝐷) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
1512, 13, 14syl2anr 596 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
169, 15mpbiri 258 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌𝑋)
17 flimcls 24014 . . . . 5 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑌𝑋) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
185, 16, 17syl2anc 583 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
19 simprrr 781 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥 ∈ (𝐽 fLim 𝑓))
202adantr 480 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝐷 ∈ (∞Met‘𝑋))
213methaus 24554 . . . . . . . 8 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Haus)
22 hausflimi 24009 . . . . . . . 8 (𝐽 ∈ Haus → ∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓))
2320, 21, 223syl 18 . . . . . . 7 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓))
2420, 4syl 17 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝐽 ∈ (TopOn‘𝑋))
25 simprl 770 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑓 ∈ (Fil‘𝑋))
26 simprrl 780 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑌𝑓)
27 flimrest 24012 . . . . . . . . . . 11 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2824, 25, 26, 27syl3anc 1371 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2916adantr 480 . . . . . . . . . . . 12 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑌𝑋)
30 eqid 2740 . . . . . . . . . . . . 13 (𝐷 ↾ (𝑌 × 𝑌)) = (𝐷 ↾ (𝑌 × 𝑌))
31 eqid 2740 . . . . . . . . . . . . 13 (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌)))
3230, 3, 31metrest 24558 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑌𝑋) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3320, 29, 32syl2anc 583 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3433oveq1d 7463 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
3528, 34eqtr3d 2782 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
36 simplr 768 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌))
373flimcfil 25367 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑓 ∈ (CauFil‘𝐷))
3820, 19, 37syl2anc 583 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑓 ∈ (CauFil‘𝐷))
39 cfilres 25349 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4020, 25, 26, 39syl3anc 1371 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4138, 40mpbid 232 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌))))
4231cmetcvg 25338 . . . . . . . . . 10 (((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) ∧ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4336, 41, 42syl2anc 583 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4435, 43eqnetrd 3014 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅)
45 ndisj 4393 . . . . . . . 8 (((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅ ↔ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
4644, 45sylib 218 . . . . . . 7 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
47 mopick 2628 . . . . . . 7 ((∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓) ∧ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌)) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4823, 46, 47syl2anc 583 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4919, 48mpd 15 . . . . 5 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥𝑌)
5049rexlimdvaa 3162 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑥𝑌))
5118, 50sylbid 240 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) → 𝑥𝑌))
5251ssrdv 4014 . 2 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → ((cls‘𝐽)‘𝑌) ⊆ 𝑌)
533mopntop 24471 . . . 4 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Top)
542, 53syl 17 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ Top)
553mopnuni 24472 . . . . 5 (𝐷 ∈ (∞Met‘𝑋) → 𝑋 = 𝐽)
562, 55syl 17 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑋 = 𝐽)
5716, 56sseqtrd 4049 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 𝐽)
58 eqid 2740 . . . 4 𝐽 = 𝐽
5958iscld4 23094 . . 3 ((𝐽 ∈ Top ∧ 𝑌 𝐽) → (𝑌 ∈ (Clsd‘𝐽) ↔ ((cls‘𝐽)‘𝑌) ⊆ 𝑌))
6054, 57, 59syl2anc 583 . 2 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑌 ∈ (Clsd‘𝐽) ↔ ((cls‘𝐽)‘𝑌) ⊆ 𝑌))
6152, 60mpbird 257 1 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 ∈ (Clsd‘𝐽))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 206  wa 395   = wceq 1537  wex 1777  wcel 2108  ∃*wmo 2541  wne 2946  wrex 3076  cin 3975  wss 3976  c0 4352   cuni 4931   × cxp 5698  dom cdm 5700  cres 5702  cfv 6573  (class class class)co 7448  t crest 17480  ∞Metcxmet 21372  Metcmet 21373  MetOpencmopn 21377  Topctop 22920  TopOnctopon 22937  Clsdccld 23045  clsccl 23047  Hauscha 23337  Filcfil 23874   fLim cflim 23963  CauFilccfil 25305  CMetccmet 25307
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1793  ax-4 1807  ax-5 1909  ax-6 1967  ax-7 2007  ax-8 2110  ax-9 2118  ax-10 2141  ax-11 2158  ax-12 2178  ax-ext 2711  ax-rep 5303  ax-sep 5317  ax-nul 5324  ax-pow 5383  ax-pr 5447  ax-un 7770  ax-cnex 11240  ax-resscn 11241  ax-1cn 11242  ax-icn 11243  ax-addcl 11244  ax-addrcl 11245  ax-mulcl 11246  ax-mulrcl 11247  ax-mulcom 11248  ax-addass 11249  ax-mulass 11250  ax-distr 11251  ax-i2m1 11252  ax-1ne0 11253  ax-1rid 11254  ax-rnegex 11255  ax-rrecex 11256  ax-cnre 11257  ax-pre-lttri 11258  ax-pre-lttrn 11259  ax-pre-ltadd 11260  ax-pre-mulgt0 11261  ax-pre-sup 11262
This theorem depends on definitions:  df-bi 207  df-an 396  df-or 847  df-3or 1088  df-3an 1089  df-tru 1540  df-fal 1550  df-ex 1778  df-nf 1782  df-sb 2065  df-mo 2543  df-eu 2572  df-clab 2718  df-cleq 2732  df-clel 2819  df-nfc 2895  df-ne 2947  df-nel 3053  df-ral 3068  df-rex 3077  df-rmo 3388  df-reu 3389  df-rab 3444  df-v 3490  df-sbc 3805  df-csb 3922  df-dif 3979  df-un 3981  df-in 3983  df-ss 3993  df-pss 3996  df-nul 4353  df-if 4549  df-pw 4624  df-sn 4649  df-pr 4651  df-op 4655  df-uni 4932  df-int 4971  df-iun 5017  df-iin 5018  df-br 5167  df-opab 5229  df-mpt 5250  df-tr 5284  df-id 5593  df-eprel 5599  df-po 5607  df-so 5608  df-fr 5652  df-we 5654  df-xp 5706  df-rel 5707  df-cnv 5708  df-co 5709  df-dm 5710  df-rn 5711  df-res 5712  df-ima 5713  df-pred 6332  df-ord 6398  df-on 6399  df-lim 6400  df-suc 6401  df-iota 6525  df-fun 6575  df-fn 6576  df-f 6577  df-f1 6578  df-fo 6579  df-f1o 6580  df-fv 6581  df-riota 7404  df-ov 7451  df-oprab 7452  df-mpo 7453  df-om 7904  df-1st 8030  df-2nd 8031  df-frecs 8322  df-wrecs 8353  df-recs 8427  df-rdg 8466  df-1o 8522  df-2o 8523  df-er 8763  df-map 8886  df-en 9004  df-dom 9005  df-sdom 9006  df-fin 9007  df-fi 9480  df-sup 9511  df-inf 9512  df-pnf 11326  df-mnf 11327  df-xr 11328  df-ltxr 11329  df-le 11330  df-sub 11522  df-neg 11523  df-div 11948  df-nn 12294  df-2 12356  df-n0 12554  df-z 12640  df-uz 12904  df-q 13014  df-rp 13058  df-xneg 13175  df-xadd 13176  df-xmul 13177  df-ico 13413  df-icc 13414  df-rest 17482  df-topgen 17503  df-psmet 21379  df-xmet 21380  df-met 21381  df-bl 21382  df-mopn 21383  df-fbas 21384  df-fg 21385  df-top 22921  df-topon 22938  df-bases 22974  df-cld 23048  df-ntr 23049  df-cls 23050  df-nei 23127  df-haus 23344  df-fil 23875  df-flim 23968  df-cfil 25308  df-cmet 25310
This theorem is referenced by:  cmetss  25369  cmssmscld  25403
  Copyright terms: Public domain W3C validator