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

Theorem efopnlem2 25717
Description: Lemma for efopn 25718. (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 25625 . . . . . . . 8 log:(ℂ ∖ {0})–1-1-onto→ran log
2 f1orn 6710 . . . . . . . . 9 (log:(ℂ ∖ {0})–1-1-onto→ran log ↔ (log Fn (ℂ ∖ {0}) ∧ Fun log))
32simprbi 496 . . . . . . . 8 (log:(ℂ ∖ {0})–1-1-onto→ran log → Fun log)
4 funcnvres 6496 . . . . . . . 8 (Fun log → (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0)))))
51, 3, 4mp2b 10 . . . . . . 7 (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0))))
6 df-log 25617 . . . . . . . . . 10 log = (exp ↾ (ℑ “ (-π(,]π)))
76cnveqi 5772 . . . . . . . . 9 log = (exp ↾ (ℑ “ (-π(,]π)))
8 relres 5909 . . . . . . . . . 10 Rel (exp ↾ (ℑ “ (-π(,]π)))
9 dfrel2 6081 . . . . . . . . . 10 (Rel (exp ↾ (ℑ “ (-π(,]π))) ↔ (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π))))
108, 9mpbi 229 . . . . . . . . 9 (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π)))
117, 10eqtri 2766 . . . . . . . 8 log = (exp ↾ (ℑ “ (-π(,]π)))
1211reseq1i 5876 . . . . . . 7 (log ↾ (log “ (ℂ ∖ (-∞(,]0)))) = ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0))))
13 imassrn 5969 . . . . . . . . 9 (log “ (ℂ ∖ (-∞(,]0))) ⊆ ran log
14 logrn 25619 . . . . . . . . 9 ran log = (ℑ “ (-π(,]π))
1513, 14sseqtri 3953 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π))
16 resabs1 5910 . . . . . . . 8 ((log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π)) → ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0)))))
1715, 16ax-mp 5 . . . . . . 7 ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0)))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
185, 12, 173eqtri 2770 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) = (exp ↾ (log “ (ℂ ∖ (-∞(,]0))))
1918imaeq1i 5955 . . . . 5 ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅))
20 cnxmet 23842 . . . . . . . . . . . 12 (abs ∘ − ) ∈ (∞Met‘ℂ)
21 0cnd 10899 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 0 ∈ ℂ)
22 rpxr 12668 . . . . . . . . . . . . 13 (𝑅 ∈ ℝ+𝑅 ∈ ℝ*)
2322adantr 480 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 𝑅 ∈ ℝ*)
24 blssm 23479 . . . . . . . . . . . 12 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2520, 21, 23, 24mp3an2i 1464 . . . . . . . . . . 11 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2625sselda 3917 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ ℂ)
2726imcld 14834 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ ℝ)
28 efopnlem1 25716 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (abs‘(ℑ‘𝑥)) < π)
29 pire 25520 . . . . . . . . . . . . . 14 π ∈ ℝ
30 abslt 14954 . . . . . . . . . . . . . 14 (((ℑ‘𝑥) ∈ ℝ ∧ π ∈ ℝ) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3127, 29, 30sylancl 585 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → ((abs‘(ℑ‘𝑥)) < π ↔ (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3228, 31mpbid 231 . . . . . . . . . . . 12 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (-π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
3332simpld 494 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → -π < (ℑ‘𝑥))
3432simprd 495 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) < π)
3529renegcli 11212 . . . . . . . . . . . . 13 -π ∈ ℝ
3635rexri 10964 . . . . . . . . . . . 12 -π ∈ ℝ*
3729rexri 10964 . . . . . . . . . . . 12 π ∈ ℝ*
38 elioo2 13049 . . . . . . . . . . . 12 ((-π ∈ ℝ* ∧ π ∈ ℝ*) → ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3936, 37, 38mp2an 688 . . . . . . . . . . 11 ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
4027, 33, 34, 39syl3anbrc 1341 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ (-π(,)π))
41 imf 14752 . . . . . . . . . . 11 ℑ:ℂ⟶ℝ
42 ffn 6584 . . . . . . . . . . 11 (ℑ:ℂ⟶ℝ → ℑ Fn ℂ)
43 elpreima 6917 . . . . . . . . . . 11 (ℑ Fn ℂ → (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π))))
4441, 42, 43mp2b 10 . . . . . . . . . 10 (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π)))
4526, 40, 44sylanbrc 582 . . . . . . . . 9 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ (ℑ “ (-π(,)π)))
4645ex 412 . . . . . . . 8 ((𝑅 ∈ ℝ+𝑅 < π) → (𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅) → 𝑥 ∈ (ℑ “ (-π(,)π))))
4746ssrdv 3923 . . . . . . 7 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (ℑ “ (-π(,)π)))
48 df-ima 5593 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) = ran (log ↾ (ℂ ∖ (-∞(,]0)))
49 eqid 2738 . . . . . . . . . 10 (ℂ ∖ (-∞(,]0)) = (ℂ ∖ (-∞(,]0))
5049logf1o2 25710 . . . . . . . . 9 (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π))
51 f1ofo 6707 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π)) → (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)))
52 forn 6675 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)) → ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π)))
5350, 51, 52mp2b 10 . . . . . . . 8 ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5448, 53eqtri 2766 . . . . . . 7 (log “ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5547, 54sseqtrrdi 3968 . . . . . 6 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (log “ (ℂ ∖ (-∞(,]0))))
56 resima2 5915 . . . . . 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 2791 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = (exp “ (0(ball‘(abs ∘ − ))𝑅)))
5949logcn 25707 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((ℂ ∖ (-∞(,]0))–cn→ℂ)
60 difss 4062 . . . . . . 7 (ℂ ∖ (-∞(,]0)) ⊆ ℂ
61 ssid 3939 . . . . . . 7 ℂ ⊆ ℂ
62 efopn.j . . . . . . . 8 𝐽 = (TopOpen‘ℂfld)
63 eqid 2738 . . . . . . . 8 (𝐽t (ℂ ∖ (-∞(,]0))) = (𝐽t (ℂ ∖ (-∞(,]0)))
6462cnfldtopon 23852 . . . . . . . . 9 𝐽 ∈ (TopOn‘ℂ)
6564toponrestid 21978 . . . . . . . 8 𝐽 = (𝐽t ℂ)
6662, 63, 65cncfcn 23979 . . . . . . 7 (((ℂ ∖ (-∞(,]0)) ⊆ ℂ ∧ ℂ ⊆ ℂ) → ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽))
6760, 61, 66mp2an 688 . . . . . 6 ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6859, 67eleqtri 2837 . . . . 5 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6962cnfldtopn 23851 . . . . . . 7 𝐽 = (MetOpen‘(abs ∘ − ))
7069blopn 23562 . . . . . 6 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
7120, 21, 23, 70mp3an2i 1464 . . . . 5 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
72 cnima 22324 . . . . 5 (((log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽) ∧ (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7368, 71, 72sylancr 586 . . . 4 ((𝑅 ∈ ℝ+𝑅 < π) → ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7458, 73eqeltrrd 2840 . . 3 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7562cnfldtop 23853 . . . 4 𝐽 ∈ Top
7649logdmopn 25709 . . . . 5 (ℂ ∖ (-∞(,]0)) ∈ (TopOpen‘ℂfld)
7776, 62eleqtrri 2838 . . . 4 (ℂ ∖ (-∞(,]0)) ∈ 𝐽
78 restopn2 22236 . . . 4 ((𝐽 ∈ Top ∧ (ℂ ∖ (-∞(,]0)) ∈ 𝐽) → ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))) ↔ ((exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽 ∧ (exp “ (0(ball‘(abs ∘ − ))𝑅)) ⊆ (ℂ ∖ (-∞(,]0)))))
7975, 77, 78mp2an 688 . . 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 494 1 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ 𝐽)
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 205  wa 395  w3a 1085   = wceq 1539  wcel 2108  cdif 3880  wss 3883  {csn 4558   class class class wbr 5070  ccnv 5579  ran crn 5581  cres 5582  cima 5583  ccom 5584  Rel wrel 5585  Fun wfun 6412   Fn wfn 6413  wf 6414  ontowfo 6416  1-1-ontowf1o 6417  cfv 6418  (class class class)co 7255  cc 10800  cr 10801  0cc0 10802  -∞cmnf 10938  *cxr 10939   < clt 10940  cmin 11135  -cneg 11136  +crp 12659  (,)cioo 13008  (,]cioc 13009  cim 14737  abscabs 14873  expce 15699  πcpi 15704  t crest 17048  TopOpenctopn 17049  ∞Metcxmet 20495  ballcbl 20497  fldccnfld 20510  Topctop 21950   Cn ccn 22283  cnccncf 23945  logclog 25615
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1799  ax-4 1813  ax-5 1914  ax-6 1972  ax-7 2012  ax-8 2110  ax-9 2118  ax-10 2139  ax-11 2156  ax-12 2173  ax-ext 2709  ax-rep 5205  ax-sep 5218  ax-nul 5225  ax-pow 5283  ax-pr 5347  ax-un 7566  ax-inf2 9329  ax-cnex 10858  ax-resscn 10859  ax-1cn 10860  ax-icn 10861  ax-addcl 10862  ax-addrcl 10863  ax-mulcl 10864  ax-mulrcl 10865  ax-mulcom 10866  ax-addass 10867  ax-mulass 10868  ax-distr 10869  ax-i2m1 10870  ax-1ne0 10871  ax-1rid 10872  ax-rnegex 10873  ax-rrecex 10874  ax-cnre 10875  ax-pre-lttri 10876  ax-pre-lttrn 10877  ax-pre-ltadd 10878  ax-pre-mulgt0 10879  ax-pre-sup 10880  ax-addf 10881  ax-mulf 10882
This theorem depends on definitions:  df-bi 206  df-an 396  df-or 844  df-3or 1086  df-3an 1087  df-tru 1542  df-fal 1552  df-ex 1784  df-nf 1788  df-sb 2069  df-mo 2540  df-eu 2569  df-clab 2716  df-cleq 2730  df-clel 2817  df-nfc 2888  df-ne 2943  df-nel 3049  df-ral 3068  df-rex 3069  df-reu 3070  df-rmo 3071  df-rab 3072  df-v 3424  df-sbc 3712  df-csb 3829  df-dif 3886  df-un 3888  df-in 3890  df-ss 3900  df-pss 3902  df-nul 4254  df-if 4457  df-pw 4532  df-sn 4559  df-pr 4561  df-tp 4563  df-op 4565  df-uni 4837  df-int 4877  df-iun 4923  df-iin 4924  df-br 5071  df-opab 5133  df-mpt 5154  df-tr 5188  df-id 5480  df-eprel 5486  df-po 5494  df-so 5495  df-fr 5535  df-se 5536  df-we 5537  df-xp 5586  df-rel 5587  df-cnv 5588  df-co 5589  df-dm 5590  df-rn 5591  df-res 5592  df-ima 5593  df-pred 6191  df-ord 6254  df-on 6255  df-lim 6256  df-suc 6257  df-iota 6376  df-fun 6420  df-fn 6421  df-f 6422  df-f1 6423  df-fo 6424  df-f1o 6425  df-fv 6426  df-isom 6427  df-riota 7212  df-ov 7258  df-oprab 7259  df-mpo 7260  df-of 7511  df-om 7688  df-1st 7804  df-2nd 7805  df-supp 7949  df-frecs 8068  df-wrecs 8099  df-recs 8173  df-rdg 8212  df-1o 8267  df-2o 8268  df-er 8456  df-map 8575  df-pm 8576  df-ixp 8644  df-en 8692  df-dom 8693  df-sdom 8694  df-fin 8695  df-fsupp 9059  df-fi 9100  df-sup 9131  df-inf 9132  df-oi 9199  df-card 9628  df-pnf 10942  df-mnf 10943  df-xr 10944  df-ltxr 10945  df-le 10946  df-sub 11137  df-neg 11138  df-div 11563  df-nn 11904  df-2 11966  df-3 11967  df-4 11968  df-5 11969  df-6 11970  df-7 11971  df-8 11972  df-9 11973  df-n0 12164  df-z 12250  df-dec 12367  df-uz 12512  df-q 12618  df-rp 12660  df-xneg 12777  df-xadd 12778  df-xmul 12779  df-ioo 13012  df-ioc 13013  df-ico 13014  df-icc 13015  df-fz 13169  df-fzo 13312  df-fl 13440  df-mod 13518  df-seq 13650  df-exp 13711  df-fac 13916  df-bc 13945  df-hash 13973  df-shft 14706  df-cj 14738  df-re 14739  df-im 14740  df-sqrt 14874  df-abs 14875  df-limsup 15108  df-clim 15125  df-rlim 15126  df-sum 15326  df-ef 15705  df-sin 15707  df-cos 15708  df-tan 15709  df-pi 15710  df-struct 16776  df-sets 16793  df-slot 16811  df-ndx 16823  df-base 16841  df-ress 16868  df-plusg 16901  df-mulr 16902  df-starv 16903  df-sca 16904  df-vsca 16905  df-ip 16906  df-tset 16907  df-ple 16908  df-ds 16910  df-unif 16911  df-hom 16912  df-cco 16913  df-rest 17050  df-topn 17051  df-0g 17069  df-gsum 17070  df-topgen 17071  df-pt 17072  df-prds 17075  df-xrs 17130  df-qtop 17135  df-imas 17136  df-xps 17138  df-mre 17212  df-mrc 17213  df-acs 17215  df-mgm 18241  df-sgrp 18290  df-mnd 18301  df-submnd 18346  df-mulg 18616  df-cntz 18838  df-cmn 19303  df-psmet 20502  df-xmet 20503  df-met 20504  df-bl 20505  df-mopn 20506  df-fbas 20507  df-fg 20508  df-cnfld 20511  df-top 21951  df-topon 21968  df-topsp 21990  df-bases 22004  df-cld 22078  df-ntr 22079  df-cls 22080  df-nei 22157  df-lp 22195  df-perf 22196  df-cn 22286  df-cnp 22287  df-haus 22374  df-cmp 22446  df-tx 22621  df-hmeo 22814  df-fil 22905  df-fm 22997  df-flim 22998  df-flf 22999  df-xms 23381  df-ms 23382  df-tms 23383  df-cncf 23947  df-limc 24935  df-dv 24936  df-log 25617
This theorem is referenced by:  efopn  25718
  Copyright terms: Public domain W3C validator