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

Theorem efopnlem2 25243
Description: Lemma for efopn 25244. (Contributed by Mario Carneiro, 2-May-2015.)
Hypothesis
Ref Expression
efopn.j 𝐽 = (TopOpen‘ℂfld)
Assertion
Ref Expression
efopnlem2 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽)

Proof of Theorem efopnlem2
Dummy variable 𝑥 is distinct from all other variables.
StepHypRef Expression
1 logf1o 25151 . . . . . . . 8 log:(ℂ ∖ {0})–1-1-onto→ran log
2 f1orn 6628 . . . . . . . . 9 (log:(ℂ ∖ {0})–1-1-onto→ran log ↔ (log Fn (ℂ ∖ {0}) ∧ Fun log))
32simprbi 499 . . . . . . . 8 (log:(ℂ ∖ {0})–1-1-onto→ran log → Fun log)
4 funcnvres 6435 . . . . . . . 8 (Fun log → (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0)))))
51, 3, 4mp2b 10 . . . . . . 7 (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0))))
6 df-log 25143 . . . . . . . . . 10 log = (exp ↾ (ℑ “ (-π(,]π)))
76cnveqi 5748 . . . . . . . . 9 log = (exp ↾ (ℑ “ (-π(,]π)))
8 relres 5885 . . . . . . . . . 10 Rel (exp ↾ (ℑ “ (-π(,]π)))
9 dfrel2 6049 . . . . . . . . . 10 (Rel (exp ↾ (ℑ “ (-π(,]π))) ↔ (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π))))
108, 9mpbi 232 . . . . . . . . 9 (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π)))
117, 10eqtri 2847 . . . . . . . 8 log = (exp ↾ (ℑ “ (-π(,]π)))
1211reseq1i 5852 . . . . . . 7 (log ↾ (log “ (ℂ ∖ (-∞(,]0)))) = ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0))))
13 imassrn 5943 . . . . . . . . 9 (log “ (ℂ ∖ (-∞(,]0))) ⊆ ran log
14 logrn 25145 . . . . . . . . 9 ran log = (ℑ “ (-π(,]π))
1513, 14sseqtri 4006 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π))
16 resabs1 5886 . . . . . . . 8 ((log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π)) → ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0)))))
1715, 16ax-mp 5 . . . . . . 7 ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
185, 12, 173eqtri 2851 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
1918imaeq1i 5929 . . . . 5 ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅))
20 cnxmet 23384 . . . . . . . . . . . 12 (abs ∘ − ) ∈ (∞Met‘ℂ)
21 0cnd 10637 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 0 ∈ ℂ)
22 rpxr 12401 . . . . . . . . . . . . 13 (𝑅 ∈ ℝ+𝑅 ∈ ℝ*)
2322adantr 483 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 𝑅 ∈ ℝ*)
24 blssm 23031 . . . . . . . . . . . 12 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2520, 21, 23, 24mp3an2i 1462 . . . . . . . . . . 11 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2625sselda 3970 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ ℂ)
2726imcld 14557 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ ℝ)
28 efopnlem1 25242 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (abs‘(ℑ‘𝑥)) < π)
29 pire 25047 . . . . . . . . . . . . . 14 π ∈ ℝ
30 abslt 14677 . . . . . . . . . . . . . 14 (((ℑ‘𝑥) ∈ ℝ ∧ π ∈ ℝ) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3127, 29, 30sylancl 588 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3228, 31mpbid 234 . . . . . . . . . . . 12 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
3332simpld 497 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → -π < (ℑ‘𝑥))
3432simprd 498 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) < π)
3529renegcli 10950 . . . . . . . . . . . . 13 -π ∈ ℝ
3635rexri 10702 . . . . . . . . . . . 12 -π ∈ ℝ*
3729rexri 10702 . . . . . . . . . . . 12 π ∈ ℝ*
38 elioo2 12782 . . . . . . . . . . . 12 ((-π ∈ ℝ* ∧ π ∈ ℝ*) → ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3936, 37, 38mp2an 690 . . . . . . . . . . 11 ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
4027, 33, 34, 39syl3anbrc 1339 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ (-π(,)π))
41 imf 14475 . . . . . . . . . . 11 ℑ:ℂ⟶ℝ
42 ffn 6517 . . . . . . . . . . 11 (ℑ:ℂ⟶ℝ → ℑ Fn ℂ)
43 elpreima 6831 . . . . . . . . . . 11 (ℑ Fn ℂ → (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π))))
4441, 42, 43mp2b 10 . . . . . . . . . 10 (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π)))
4526, 40, 44sylanbrc 585 . . . . . . . . 9 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ (ℑ “ (-π(,)π)))
4645ex 415 . . . . . . . 8 ((𝑅 ∈ ℝ+𝑅 < π) → (𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅) → 𝑥 ∈ (ℑ “ (-π(,)π))))
4746ssrdv 3976 . . . . . . 7 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (ℑ “ (-π(,)π)))
48 df-ima 5571 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) = ran (log ↾ (ℂ ∖ (-∞(,]0)))
49 eqid 2824 . . . . . . . . . 10 (ℂ ∖ (-∞(,]0)) = (ℂ ∖ (-∞(,]0))
5049logf1o2 25236 . . . . . . . . 9 (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π))
51 f1ofo 6625 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π)) → (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)))
52 forn 6596 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)) → ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π)))
5350, 51, 52mp2b 10 . . . . . . . 8 ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5448, 53eqtri 2847 . . . . . . 7 (log “ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5547, 54sseqtrrdi 4021 . . . . . 6 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (log “ (ℂ ∖ (-∞(,]0))))
56 resima2 5891 . . . . . 6 ((0(ball‘(abs ∘ − ))𝑅) ⊆ (log “ (ℂ ∖ (-∞(,]0))) → ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅)) = (exp “ (0(ball‘(abs ∘ − ))𝑅)))
5755, 56syl 17 . . . . 5 ((𝑅 ∈ ℝ+𝑅 < π) → ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅)) = (exp “ (0(ball‘(abs ∘ − ))𝑅)))
5819, 57syl5eq 2871 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = (exp “ (0(ball‘(abs ∘ − ))𝑅)))
5949logcn 25233 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((ℂ ∖ (-∞(,]0))–cn→ℂ)
60 difss 4111 . . . . . . 7 (ℂ ∖ (-∞(,]0)) ⊆ ℂ
61 ssid 3992 . . . . . . 7 ℂ ⊆ ℂ
62 efopn.j . . . . . . . 8 𝐽 = (TopOpen‘ℂfld)
63 eqid 2824 . . . . . . . 8 (𝐽t (ℂ ∖ (-∞(,]0))) = (𝐽t (ℂ ∖ (-∞(,]0)))
6462cnfldtopon 23394 . . . . . . . . 9 𝐽 ∈ (TopOn‘ℂ)
6564toponrestid 21532 . . . . . . . 8 𝐽 = (𝐽t ℂ)
6662, 63, 65cncfcn 23520 . . . . . . 7 (((ℂ ∖ (-∞(,]0)) ⊆ ℂ ∧ ℂ ⊆ ℂ) → ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽))
6760, 61, 66mp2an 690 . . . . . 6 ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6859, 67eleqtri 2914 . . . . 5 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6962cnfldtopn 23393 . . . . . . 7 𝐽 = (MetOpen‘(abs ∘ − ))
7069blopn 23113 . . . . . 6 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
7120, 21, 23, 70mp3an2i 1462 . . . . 5 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
72 cnima 21876 . . . . 5 (((log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽) ∧ (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7368, 71, 72sylancr 589 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7458, 73eqeltrrd 2917 . . 3 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7562cnfldtop 23395 . . . 4 𝐽 ∈ Top
7649logdmopn 25235 . . . . 5 (ℂ ∖ (-∞(,]0)) ∈ (TopOpen‘ℂfld)
7776, 62eleqtrri 2915 . . . 4 (ℂ ∖ (-∞(,]0)) ∈ 𝐽
78 restopn2 21788 . . . 4 ((𝐽 ∈ Top ∧ (ℂ ∖ (-∞(,]0)) ∈ 𝐽) → ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))) ↔ ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0)))))
7975, 77, 78mp2an 690 . . 3 ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))) ↔ ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0))))
8074, 79sylib 220 . 2 ((𝑅 ∈ ℝ+𝑅 < π) → ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0))))
8180simpld 497 1 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽)
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 208  wa 398  w3a 1083   = wceq 1536  wcel 2113  cdif 3936  wss 3939  {csn 4570   class class class wbr 5069  ccnv 5557  ran crn 5559  cres 5560  cima 5561  ccom 5562  Rel wrel 5563  Fun wfun 6352   Fn wfn 6353  wf 6354  ontowfo 6356  1-1-ontowf1o 6357  cfv 6358  (class class class)co 7159  cc 10538  cr 10539  0cc0 10540  -∞cmnf 10676  *cxr 10677   < clt 10678  cmin 10873  -cneg 10874  +crp 12392  (,)cioo 12741  (,]cioc 12742  cim 14460  abscabs 14596  expce 15418  πcpi 15423  t crest 16697  TopOpenctopn 16698  ∞Metcxmet 20533  ballcbl 20535  fldccnfld 20548  Topctop 21504   Cn ccn 21835  cnccncf 23487  logclog 25141
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 1969  ax-7 2014  ax-8 2115  ax-9 2123  ax-10 2144  ax-11 2160  ax-12 2176  ax-ext 2796  ax-rep 5193  ax-sep 5206  ax-nul 5213  ax-pow 5269  ax-pr 5333  ax-un 7464  ax-inf2 9107  ax-cnex 10596  ax-resscn 10597  ax-1cn 10598  ax-icn 10599  ax-addcl 10600  ax-addrcl 10601  ax-mulcl 10602  ax-mulrcl 10603  ax-mulcom 10604  ax-addass 10605  ax-mulass 10606  ax-distr 10607  ax-i2m1 10608  ax-1ne0 10609  ax-1rid 10610  ax-rnegex 10611  ax-rrecex 10612  ax-cnre 10613  ax-pre-lttri 10614  ax-pre-lttrn 10615  ax-pre-ltadd 10616  ax-pre-mulgt0 10617  ax-pre-sup 10618  ax-addf 10619  ax-mulf 10620
This theorem depends on definitions:  df-bi 209  df-an 399  df-or 844  df-3or 1084  df-3an 1085  df-tru 1539  df-fal 1549  df-ex 1780  df-nf 1784  df-sb 2069  df-mo 2621  df-eu 2653  df-clab 2803  df-cleq 2817  df-clel 2896  df-nfc 2966  df-ne 3020  df-nel 3127  df-ral 3146  df-rex 3147  df-reu 3148  df-rmo 3149  df-rab 3150  df-v 3499  df-sbc 3776  df-csb 3887  df-dif 3942  df-un 3944  df-in 3946  df-ss 3955  df-pss 3957  df-nul 4295  df-if 4471  df-pw 4544  df-sn 4571  df-pr 4573  df-tp 4575  df-op 4577  df-uni 4842  df-int 4880  df-iun 4924  df-iin 4925  df-br 5070  df-opab 5132  df-mpt 5150  df-tr 5176  df-id 5463  df-eprel 5468  df-po 5477  df-so 5478  df-fr 5517  df-se 5518  df-we 5519  df-xp 5564  df-rel 5565  df-cnv 5566  df-co 5567  df-dm 5568  df-rn 5569  df-res 5570  df-ima 5571  df-pred 6151  df-ord 6197  df-on 6198  df-lim 6199  df-suc 6200  df-iota 6317  df-fun 6360  df-fn 6361  df-f 6362  df-f1 6363  df-fo 6364  df-f1o 6365  df-fv 6366  df-isom 6367  df-riota 7117  df-ov 7162  df-oprab 7163  df-mpo 7164  df-of 7412  df-om 7584  df-1st 7692  df-2nd 7693  df-supp 7834  df-wrecs 7950  df-recs 8011  df-rdg 8049  df-1o 8105  df-2o 8106  df-oadd 8109  df-er 8292  df-map 8411  df-pm 8412  df-ixp 8465  df-en 8513  df-dom 8514  df-sdom 8515  df-fin 8516  df-fsupp 8837  df-fi 8878  df-sup 8909  df-inf 8910  df-oi 8977  df-card 9371  df-pnf 10680  df-mnf 10681  df-xr 10682  df-ltxr 10683  df-le 10684  df-sub 10875  df-neg 10876  df-div 11301  df-nn 11642  df-2 11703  df-3 11704  df-4 11705  df-5 11706  df-6 11707  df-7 11708  df-8 11709  df-9 11710  df-n0 11901  df-z 11985  df-dec 12102  df-uz 12247  df-q 12352  df-rp 12393  df-xneg 12510  df-xadd 12511  df-xmul 12512  df-ioo 12745  df-ioc 12746  df-ico 12747  df-icc 12748  df-fz 12896  df-fzo 13037  df-fl 13165  df-mod 13241  df-seq 13373  df-exp 13433  df-fac 13637  df-bc 13666  df-hash 13694  df-shft 14429  df-cj 14461  df-re 14462  df-im 14463  df-sqrt 14597  df-abs 14598  df-limsup 14831  df-clim 14848  df-rlim 14849  df-sum 15046  df-ef 15424  df-sin 15426  df-cos 15427  df-tan 15428  df-pi 15429  df-struct 16488  df-ndx 16489  df-slot 16490  df-base 16492  df-sets 16493  df-ress 16494  df-plusg 16581  df-mulr 16582  df-starv 16583  df-sca 16584  df-vsca 16585  df-ip 16586  df-tset 16587  df-ple 16588  df-ds 16590  df-unif 16591  df-hom 16592  df-cco 16593  df-rest 16699  df-topn 16700  df-0g 16718  df-gsum 16719  df-topgen 16720  df-pt 16721  df-prds 16724  df-xrs 16778  df-qtop 16783  df-imas 16784  df-xps 16786  df-mre 16860  df-mrc 16861  df-acs 16863  df-mgm 17855  df-sgrp 17904  df-mnd 17915  df-submnd 17960  df-mulg 18228  df-cntz 18450  df-cmn 18911  df-psmet 20540  df-xmet 20541  df-met 20542  df-bl 20543  df-mopn 20544  df-fbas 20545  df-fg 20546  df-cnfld 20549  df-top 21505  df-topon 21522  df-topsp 21544  df-bases 21557  df-cld 21630  df-ntr 21631  df-cls 21632  df-nei 21709  df-lp 21747  df-perf 21748  df-cn 21838  df-cnp 21839  df-haus 21926  df-cmp 21998  df-tx 22173  df-hmeo 22366  df-fil 22457  df-fm 22549  df-flim 22550  df-flf 22551  df-xms 22933  df-ms 22934  df-tms 22935  df-cncf 23489  df-limc 24467  df-dv 24468  df-log 25143
This theorem is referenced by:  efopn  25244
  Copyright terms: Public domain W3C validator