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

Theorem efopnlem2 25892
Description: Lemma for efopn 25893. (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 25800 . . . . . . . 8 log:(ℂ ∖ {0})–1-1-onto→ran log
2 f1orn 6763 . . . . . . . . 9 (log:(ℂ ∖ {0})–1-1-onto→ran log ↔ (log Fn (ℂ ∖ {0}) ∧ Fun log))
32simprbi 497 . . . . . . . 8 (log:(ℂ ∖ {0})–1-1-onto→ran log → Fun log)
4 funcnvres 6548 . . . . . . . 8 (Fun log → (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0)))))
51, 3, 4mp2b 10 . . . . . . 7 (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0))))
6 df-log 25792 . . . . . . . . . 10 log = (exp ↾ (ℑ “ (-π(,]π)))
76cnveqi 5803 . . . . . . . . 9 log = (exp ↾ (ℑ “ (-π(,]π)))
8 relres 5939 . . . . . . . . . 10 Rel (exp ↾ (ℑ “ (-π(,]π)))
9 dfrel2 6114 . . . . . . . . . 10 (Rel (exp ↾ (ℑ “ (-π(,]π))) ↔ (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π))))
108, 9mpbi 229 . . . . . . . . 9 (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π)))
117, 10eqtri 2764 . . . . . . . 8 log = (exp ↾ (ℑ “ (-π(,]π)))
1211reseq1i 5906 . . . . . . 7 (log ↾ (log “ (ℂ ∖ (-∞(,]0)))) = ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0))))
13 imassrn 5997 . . . . . . . . 9 (log “ (ℂ ∖ (-∞(,]0))) ⊆ ran log
14 logrn 25794 . . . . . . . . 9 ran log = (ℑ “ (-π(,]π))
1513, 14sseqtri 3966 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π))
16 resabs1 5940 . . . . . . . 8 ((log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π)) → ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0)))))
1715, 16ax-mp 5 . . . . . . 7 ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
185, 12, 173eqtri 2768 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
1918imaeq1i 5983 . . . . 5 ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅))
20 cnxmet 24016 . . . . . . . . . . . 12 (abs ∘ − ) ∈ (∞Met‘ℂ)
21 0cnd 11047 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 0 ∈ ℂ)
22 rpxr 12818 . . . . . . . . . . . . 13 (𝑅 ∈ ℝ+𝑅 ∈ ℝ*)
2322adantr 481 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 𝑅 ∈ ℝ*)
24 blssm 23651 . . . . . . . . . . . 12 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2520, 21, 23, 24mp3an2i 1465 . . . . . . . . . . 11 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2625sselda 3930 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ ℂ)
2726imcld 14982 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ ℝ)
28 efopnlem1 25891 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (abs‘(ℑ‘𝑥)) < π)
29 pire 25695 . . . . . . . . . . . . . 14 π ∈ ℝ
30 abslt 15102 . . . . . . . . . . . . . 14 (((ℑ‘𝑥) ∈ ℝ ∧ π ∈ ℝ) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3127, 29, 30sylancl 586 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3228, 31mpbid 231 . . . . . . . . . . . 12 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
3332simpld 495 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → -π < (ℑ‘𝑥))
3432simprd 496 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) < π)
3529renegcli 11361 . . . . . . . . . . . . 13 -π ∈ ℝ
3635rexri 11112 . . . . . . . . . . . 12 -π ∈ ℝ*
3729rexri 11112 . . . . . . . . . . . 12 π ∈ ℝ*
38 elioo2 13199 . . . . . . . . . . . 12 ((-π ∈ ℝ* ∧ π ∈ ℝ*) → ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3936, 37, 38mp2an 689 . . . . . . . . . . 11 ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
4027, 33, 34, 39syl3anbrc 1342 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ (-π(,)π))
41 imf 14900 . . . . . . . . . . 11 ℑ:ℂ⟶ℝ
42 ffn 6637 . . . . . . . . . . 11 (ℑ:ℂ⟶ℝ → ℑ Fn ℂ)
43 elpreima 6974 . . . . . . . . . . 11 (ℑ Fn ℂ → (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π))))
4441, 42, 43mp2b 10 . . . . . . . . . 10 (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π)))
4526, 40, 44sylanbrc 583 . . . . . . . . 9 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ (ℑ “ (-π(,)π)))
4645ex 413 . . . . . . . 8 ((𝑅 ∈ ℝ+𝑅 < π) → (𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅) → 𝑥 ∈ (ℑ “ (-π(,)π))))
4746ssrdv 3936 . . . . . . 7 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (ℑ “ (-π(,)π)))
48 df-ima 5620 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) = ran (log ↾ (ℂ ∖ (-∞(,]0)))
49 eqid 2736 . . . . . . . . . 10 (ℂ ∖ (-∞(,]0)) = (ℂ ∖ (-∞(,]0))
5049logf1o2 25885 . . . . . . . . 9 (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π))
51 f1ofo 6760 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π)) → (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)))
52 forn 6728 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)) → ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π)))
5350, 51, 52mp2b 10 . . . . . . . 8 ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5448, 53eqtri 2764 . . . . . . 7 (log “ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5547, 54sseqtrrdi 3981 . . . . . 6 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (log “ (ℂ ∖ (-∞(,]0))))
56 resima2 5945 . . . . . 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, 57eqtrid 2788 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = (exp “ (0(ball‘(abs ∘ − ))𝑅)))
5949logcn 25882 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((ℂ ∖ (-∞(,]0))–cn→ℂ)
60 difss 4076 . . . . . . 7 (ℂ ∖ (-∞(,]0)) ⊆ ℂ
61 ssid 3952 . . . . . . 7 ℂ ⊆ ℂ
62 efopn.j . . . . . . . 8 𝐽 = (TopOpen‘ℂfld)
63 eqid 2736 . . . . . . . 8 (𝐽t (ℂ ∖ (-∞(,]0))) = (𝐽t (ℂ ∖ (-∞(,]0)))
6462cnfldtopon 24026 . . . . . . . . 9 𝐽 ∈ (TopOn‘ℂ)
6564toponrestid 22150 . . . . . . . 8 𝐽 = (𝐽t ℂ)
6662, 63, 65cncfcn 24153 . . . . . . 7 (((ℂ ∖ (-∞(,]0)) ⊆ ℂ ∧ ℂ ⊆ ℂ) → ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽))
6760, 61, 66mp2an 689 . . . . . 6 ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6859, 67eleqtri 2835 . . . . 5 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6962cnfldtopn 24025 . . . . . . 7 𝐽 = (MetOpen‘(abs ∘ − ))
7069blopn 23736 . . . . . 6 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
7120, 21, 23, 70mp3an2i 1465 . . . . 5 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
72 cnima 22496 . . . . 5 (((log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽) ∧ (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7368, 71, 72sylancr 587 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7458, 73eqeltrrd 2838 . . 3 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7562cnfldtop 24027 . . . 4 𝐽 ∈ Top
7649logdmopn 25884 . . . . 5 (ℂ ∖ (-∞(,]0)) ∈ (TopOpen‘ℂfld)
7776, 62eleqtrri 2836 . . . 4 (ℂ ∖ (-∞(,]0)) ∈ 𝐽
78 restopn2 22408 . . . 4 ((𝐽 ∈ Top ∧ (ℂ ∖ (-∞(,]0)) ∈ 𝐽) → ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))) ↔ ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0)))))
7975, 77, 78mp2an 689 . . 3 ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))) ↔ ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0))))
8074, 79sylib 217 . 2 ((𝑅 ∈ ℝ+𝑅 < π) → ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0))))
8180simpld 495 1 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽)
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 205  wa 396  w3a 1086   = wceq 1540  wcel 2105  cdif 3893  wss 3896  {csn 4570   class class class wbr 5086  ccnv 5606  ran crn 5608  cres 5609  cima 5610  ccom 5611  Rel wrel 5612  Fun wfun 6459   Fn wfn 6460  wf 6461  ontowfo 6463  1-1-ontowf1o 6464  cfv 6465  (class class class)co 7316  cc 10948  cr 10949  0cc0 10950  -∞cmnf 11086  *cxr 11087   < clt 11088  cmin 11284  -cneg 11285  +crp 12809  (,)cioo 13158  (,]cioc 13159  cim 14885  abscabs 15021  expce 15847  πcpi 15852  t crest 17205  TopOpenctopn 17206  ∞Metcxmet 20662  ballcbl 20664  fldccnfld 20677  Topctop 22122   Cn ccn 22455  cnccncf 24119  logclog 25790
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1796  ax-4 1810  ax-5 1912  ax-6 1970  ax-7 2010  ax-8 2107  ax-9 2115  ax-10 2136  ax-11 2153  ax-12 2170  ax-ext 2707  ax-rep 5223  ax-sep 5237  ax-nul 5244  ax-pow 5302  ax-pr 5366  ax-un 7629  ax-inf2 9476  ax-cnex 11006  ax-resscn 11007  ax-1cn 11008  ax-icn 11009  ax-addcl 11010  ax-addrcl 11011  ax-mulcl 11012  ax-mulrcl 11013  ax-mulcom 11014  ax-addass 11015  ax-mulass 11016  ax-distr 11017  ax-i2m1 11018  ax-1ne0 11019  ax-1rid 11020  ax-rnegex 11021  ax-rrecex 11022  ax-cnre 11023  ax-pre-lttri 11024  ax-pre-lttrn 11025  ax-pre-ltadd 11026  ax-pre-mulgt0 11027  ax-pre-sup 11028  ax-addf 11029  ax-mulf 11030
This theorem depends on definitions:  df-bi 206  df-an 397  df-or 845  df-3or 1087  df-3an 1088  df-tru 1543  df-fal 1553  df-ex 1781  df-nf 1785  df-sb 2067  df-mo 2538  df-eu 2567  df-clab 2714  df-cleq 2728  df-clel 2814  df-nfc 2886  df-ne 2941  df-nel 3047  df-ral 3062  df-rex 3071  df-rmo 3349  df-reu 3350  df-rab 3404  df-v 3442  df-sbc 3726  df-csb 3842  df-dif 3899  df-un 3901  df-in 3903  df-ss 3913  df-pss 3915  df-nul 4267  df-if 4471  df-pw 4546  df-sn 4571  df-pr 4573  df-tp 4575  df-op 4577  df-uni 4850  df-int 4892  df-iun 4938  df-iin 4939  df-br 5087  df-opab 5149  df-mpt 5170  df-tr 5204  df-id 5506  df-eprel 5512  df-po 5520  df-so 5521  df-fr 5562  df-se 5563  df-we 5564  df-xp 5613  df-rel 5614  df-cnv 5615  df-co 5616  df-dm 5617  df-rn 5618  df-res 5619  df-ima 5620  df-pred 6224  df-ord 6291  df-on 6292  df-lim 6293  df-suc 6294  df-iota 6417  df-fun 6467  df-fn 6468  df-f 6469  df-f1 6470  df-fo 6471  df-f1o 6472  df-fv 6473  df-isom 6474  df-riota 7273  df-ov 7319  df-oprab 7320  df-mpo 7321  df-of 7574  df-om 7759  df-1st 7877  df-2nd 7878  df-supp 8026  df-frecs 8145  df-wrecs 8176  df-recs 8250  df-rdg 8289  df-1o 8345  df-2o 8346  df-er 8547  df-map 8666  df-pm 8667  df-ixp 8735  df-en 8783  df-dom 8784  df-sdom 8785  df-fin 8786  df-fsupp 9205  df-fi 9246  df-sup 9277  df-inf 9278  df-oi 9345  df-card 9774  df-pnf 11090  df-mnf 11091  df-xr 11092  df-ltxr 11093  df-le 11094  df-sub 11286  df-neg 11287  df-div 11712  df-nn 12053  df-2 12115  df-3 12116  df-4 12117  df-5 12118  df-6 12119  df-7 12120  df-8 12121  df-9 12122  df-n0 12313  df-z 12399  df-dec 12517  df-uz 12662  df-q 12768  df-rp 12810  df-xneg 12927  df-xadd 12928  df-xmul 12929  df-ioo 13162  df-ioc 13163  df-ico 13164  df-icc 13165  df-fz 13319  df-fzo 13462  df-fl 13591  df-mod 13669  df-seq 13801  df-exp 13862  df-fac 14067  df-bc 14096  df-hash 14124  df-shft 14854  df-cj 14886  df-re 14887  df-im 14888  df-sqrt 15022  df-abs 15023  df-limsup 15256  df-clim 15273  df-rlim 15274  df-sum 15474  df-ef 15853  df-sin 15855  df-cos 15856  df-tan 15857  df-pi 15858  df-struct 16922  df-sets 16939  df-slot 16957  df-ndx 16969  df-base 16987  df-ress 17016  df-plusg 17049  df-mulr 17050  df-starv 17051  df-sca 17052  df-vsca 17053  df-ip 17054  df-tset 17055  df-ple 17056  df-ds 17058  df-unif 17059  df-hom 17060  df-cco 17061  df-rest 17207  df-topn 17208  df-0g 17226  df-gsum 17227  df-topgen 17228  df-pt 17229  df-prds 17232  df-xrs 17287  df-qtop 17292  df-imas 17293  df-xps 17295  df-mre 17369  df-mrc 17370  df-acs 17372  df-mgm 18400  df-sgrp 18449  df-mnd 18460  df-submnd 18505  df-mulg 18774  df-cntz 18996  df-cmn 19460  df-psmet 20669  df-xmet 20670  df-met 20671  df-bl 20672  df-mopn 20673  df-fbas 20674  df-fg 20675  df-cnfld 20678  df-top 22123  df-topon 22140  df-topsp 22162  df-bases 22176  df-cld 22250  df-ntr 22251  df-cls 22252  df-nei 22329  df-lp 22367  df-perf 22368  df-cn 22458  df-cnp 22459  df-haus 22546  df-cmp 22618  df-tx 22793  df-hmeo 22986  df-fil 23077  df-fm 23169  df-flim 23170  df-flf 23171  df-xms 23553  df-ms 23554  df-tms 23555  df-cncf 24121  df-limc 25110  df-dv 25111  df-log 25792
This theorem is referenced by:  efopn  25893
  Copyright terms: Public domain W3C validator