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

Theorem metsscmetcld 25248
Description: A complete subspace of a metric space is closed in the parent space. Formerly part of proof for cmetss 25249. (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 24255 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝐷 ∈ (∞Met‘𝑋))
21adantr 480 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐷 ∈ (∞Met‘𝑋))
3 metsscmetcld.j . . . . . . 7 𝐽 = (MetOpen‘𝐷)
43mopntopon 24360 . . . . . 6 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ (TopOn‘𝑋))
52, 4syl 17 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ (TopOn‘𝑋))
6 resss 5961 . . . . . . 7 (𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷
7 dmss 5856 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ⊆ 𝐷 → dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷)
8 dmss 5856 . . . . . . 7 (dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom 𝐷 → dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷)
96, 7, 8mp2b 10 . . . . . 6 dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷
10 cmetmet 25219 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌))
11 metdmdm 24257 . . . . . . . 8 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (Met‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
1210, 11syl 17 . . . . . . 7 ((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) → 𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)))
13 metdmdm 24257 . . . . . . 7 (𝐷 ∈ (Met‘𝑋) → 𝑋 = dom dom 𝐷)
14 sseq12 3971 . . . . . . 7 ((𝑌 = dom dom (𝐷 ↾ (𝑌 × 𝑌)) ∧ 𝑋 = dom dom 𝐷) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
1512, 13, 14syl2anr 597 . . . . . 6 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑌𝑋 ↔ dom dom (𝐷 ↾ (𝑌 × 𝑌)) ⊆ dom dom 𝐷))
169, 15mpbiri 258 . . . . 5 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌𝑋)
17 flimcls 23905 . . . . 5 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑌𝑋) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
185, 16, 17syl2anc 584 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) ↔ ∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓))))
19 simprrr 781 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥 ∈ (𝐽 fLim 𝑓))
202adantr 480 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝐷 ∈ (∞Met‘𝑋))
213methaus 24441 . . . . . . . 8 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Haus)
22 hausflimi 23900 . . . . . . . 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 23903 . . . . . . . . . . 11 ((𝐽 ∈ (TopOn‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2824, 25, 26, 27syl3anc 1373 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((𝐽 fLim 𝑓) ∩ 𝑌))
2916adantr 480 . . . . . . . . . . . 12 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑌𝑋)
30 eqid 2729 . . . . . . . . . . . . 13 (𝐷 ↾ (𝑌 × 𝑌)) = (𝐷 ↾ (𝑌 × 𝑌))
31 eqid 2729 . . . . . . . . . . . . 13 (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌)))
3230, 3, 31metrest 24445 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑌𝑋) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3320, 29, 32syl2anc 584 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐽t 𝑌) = (MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))))
3433oveq1d 7384 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽t 𝑌) fLim (𝑓t 𝑌)) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
3528, 34eqtr3d 2766 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) = ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)))
36 simplr 768 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌))
373flimcfil 25247 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑓 ∈ (CauFil‘𝐷))
3820, 19, 37syl2anc 584 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑓 ∈ (CauFil‘𝐷))
39 cfilres 25229 . . . . . . . . . . . 12 ((𝐷 ∈ (∞Met‘𝑋) ∧ 𝑓 ∈ (Fil‘𝑋) ∧ 𝑌𝑓) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4020, 25, 26, 39syl3anc 1373 . . . . . . . . . . 11 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓 ∈ (CauFil‘𝐷) ↔ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))))
4138, 40mpbid 232 . . . . . . . . . 10 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌))))
4231cmetcvg 25218 . . . . . . . . . 10 (((𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌) ∧ (𝑓t 𝑌) ∈ (CauFil‘(𝐷 ↾ (𝑌 × 𝑌)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4336, 41, 42syl2anc 584 . . . . . . . . 9 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((MetOpen‘(𝐷 ↾ (𝑌 × 𝑌))) fLim (𝑓t 𝑌)) ≠ ∅)
4435, 43eqnetrd 2992 . . . . . . . 8 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅)
45 ndisj 4329 . . . . . . . 8 (((𝐽 fLim 𝑓) ∩ 𝑌) ≠ ∅ ↔ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
4644, 45sylib 218 . . . . . . 7 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌))
47 mopick 2618 . . . . . . 7 ((∃*𝑥 𝑥 ∈ (𝐽 fLim 𝑓) ∧ ∃𝑥(𝑥 ∈ (𝐽 fLim 𝑓) ∧ 𝑥𝑌)) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4823, 46, 47syl2anc 584 . . . . . 6 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → (𝑥 ∈ (𝐽 fLim 𝑓) → 𝑥𝑌))
4919, 48mpd 15 . . . . 5 (((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) ∧ (𝑓 ∈ (Fil‘𝑋) ∧ (𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)))) → 𝑥𝑌)
5049rexlimdvaa 3135 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (∃𝑓 ∈ (Fil‘𝑋)(𝑌𝑓𝑥 ∈ (𝐽 fLim 𝑓)) → 𝑥𝑌))
5118, 50sylbid 240 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → (𝑥 ∈ ((cls‘𝐽)‘𝑌) → 𝑥𝑌))
5251ssrdv 3949 . 2 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → ((cls‘𝐽)‘𝑌) ⊆ 𝑌)
533mopntop 24361 . . . 4 (𝐷 ∈ (∞Met‘𝑋) → 𝐽 ∈ Top)
542, 53syl 17 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝐽 ∈ Top)
553mopnuni 24362 . . . . 5 (𝐷 ∈ (∞Met‘𝑋) → 𝑋 = 𝐽)
562, 55syl 17 . . . 4 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑋 = 𝐽)
5716, 56sseqtrd 3980 . . 3 ((𝐷 ∈ (Met‘𝑋) ∧ (𝐷 ↾ (𝑌 × 𝑌)) ∈ (CMet‘𝑌)) → 𝑌 𝐽)
58 eqid 2729 . . . 4 𝐽 = 𝐽
5958iscld4 22985 . . 3 ((𝐽 ∈ Top ∧ 𝑌 𝐽) → (𝑌 ∈ (Clsd‘𝐽) ↔ ((cls‘𝐽)‘𝑌) ⊆ 𝑌))
6054, 57, 59syl2anc 584 . 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 1540  wex 1779  wcel 2109  ∃*wmo 2531  wne 2925  wrex 3053  cin 3910  wss 3911  c0 4292   cuni 4867   × cxp 5629  dom cdm 5631  cres 5633  cfv 6499  (class class class)co 7369  t crest 17359  ∞Metcxmet 21281  Metcmet 21282  MetOpencmopn 21286  Topctop 22813  TopOnctopon 22830  Clsdccld 22936  clsccl 22938  Hauscha 23228  Filcfil 23765   fLim cflim 23854  CauFilccfil 25185  CMetccmet 25187
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1795  ax-4 1809  ax-5 1910  ax-6 1967  ax-7 2008  ax-8 2111  ax-9 2119  ax-10 2142  ax-11 2158  ax-12 2178  ax-ext 2701  ax-rep 5229  ax-sep 5246  ax-nul 5256  ax-pow 5315  ax-pr 5382  ax-un 7691  ax-cnex 11100  ax-resscn 11101  ax-1cn 11102  ax-icn 11103  ax-addcl 11104  ax-addrcl 11105  ax-mulcl 11106  ax-mulrcl 11107  ax-mulcom 11108  ax-addass 11109  ax-mulass 11110  ax-distr 11111  ax-i2m1 11112  ax-1ne0 11113  ax-1rid 11114  ax-rnegex 11115  ax-rrecex 11116  ax-cnre 11117  ax-pre-lttri 11118  ax-pre-lttrn 11119  ax-pre-ltadd 11120  ax-pre-mulgt0 11121  ax-pre-sup 11122
This theorem depends on definitions:  df-bi 207  df-an 396  df-or 848  df-3or 1087  df-3an 1088  df-tru 1543  df-fal 1553  df-ex 1780  df-nf 1784  df-sb 2066  df-mo 2533  df-eu 2562  df-clab 2708  df-cleq 2721  df-clel 2803  df-nfc 2878  df-ne 2926  df-nel 3030  df-ral 3045  df-rex 3054  df-rmo 3351  df-reu 3352  df-rab 3403  df-v 3446  df-sbc 3751  df-csb 3860  df-dif 3914  df-un 3916  df-in 3918  df-ss 3928  df-pss 3931  df-nul 4293  df-if 4485  df-pw 4561  df-sn 4586  df-pr 4588  df-op 4592  df-uni 4868  df-int 4907  df-iun 4953  df-iin 4954  df-br 5103  df-opab 5165  df-mpt 5184  df-tr 5210  df-id 5526  df-eprel 5531  df-po 5539  df-so 5540  df-fr 5584  df-we 5586  df-xp 5637  df-rel 5638  df-cnv 5639  df-co 5640  df-dm 5641  df-rn 5642  df-res 5643  df-ima 5644  df-pred 6262  df-ord 6323  df-on 6324  df-lim 6325  df-suc 6326  df-iota 6452  df-fun 6501  df-fn 6502  df-f 6503  df-f1 6504  df-fo 6505  df-f1o 6506  df-fv 6507  df-riota 7326  df-ov 7372  df-oprab 7373  df-mpo 7374  df-om 7823  df-1st 7947  df-2nd 7948  df-frecs 8237  df-wrecs 8268  df-recs 8317  df-rdg 8355  df-1o 8411  df-2o 8412  df-er 8648  df-map 8778  df-en 8896  df-dom 8897  df-sdom 8898  df-fin 8899  df-fi 9338  df-sup 9369  df-inf 9370  df-pnf 11186  df-mnf 11187  df-xr 11188  df-ltxr 11189  df-le 11190  df-sub 11383  df-neg 11384  df-div 11812  df-nn 12163  df-2 12225  df-n0 12419  df-z 12506  df-uz 12770  df-q 12884  df-rp 12928  df-xneg 13048  df-xadd 13049  df-xmul 13050  df-ico 13288  df-icc 13289  df-rest 17361  df-topgen 17382  df-psmet 21288  df-xmet 21289  df-met 21290  df-bl 21291  df-mopn 21292  df-fbas 21293  df-fg 21294  df-top 22814  df-topon 22831  df-bases 22866  df-cld 22939  df-ntr 22940  df-cls 22941  df-nei 23018  df-haus 23235  df-fil 23766  df-flim 23859  df-cfil 25188  df-cmet 25190
This theorem is referenced by:  cmetss  25249  cmssmscld  25283
  Copyright terms: Public domain W3C validator