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

Theorem efopnlem2 26012
Description: Lemma for efopn 26013. (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 25920 . . . . . . . 8 log:(ℂ ∖ {0})–1-1-onto→ran log
2 f1orn 6794 . . . . . . . . 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 6579 . . . . . . . 8 (Fun log → (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0)))))
51, 3, 4mp2b 10 . . . . . . 7 (log ↾ (ℂ ∖ (-∞(,]0))) = (log ↾ (log “ (ℂ ∖ (-∞(,]0))))
6 df-log 25912 . . . . . . . . . 10 log = (exp ↾ (ℑ “ (-π(,]π)))
76cnveqi 5830 . . . . . . . . 9 log = (exp ↾ (ℑ “ (-π(,]π)))
8 relres 5966 . . . . . . . . . 10 Rel (exp ↾ (ℑ “ (-π(,]π)))
9 dfrel2 6141 . . . . . . . . . 10 (Rel (exp ↾ (ℑ “ (-π(,]π))) ↔ (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π))))
108, 9mpbi 229 . . . . . . . . 9 (exp ↾ (ℑ “ (-π(,]π))) = (exp ↾ (ℑ “ (-π(,]π)))
117, 10eqtri 2764 . . . . . . . 8 log = (exp ↾ (ℑ “ (-π(,]π)))
1211reseq1i 5933 . . . . . . 7 (log ↾ (log “ (ℂ ∖ (-∞(,]0)))) = ((exp ↾ (ℑ “ (-π(,]π))) ↾ (log “ (ℂ ∖ (-∞(,]0))))
13 imassrn 6024 . . . . . . . . 9 (log “ (ℂ ∖ (-∞(,]0))) ⊆ ran log
14 logrn 25914 . . . . . . . . 9 ran log = (ℑ “ (-π(,]π))
1513, 14sseqtri 3980 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) ⊆ (ℑ “ (-π(,]π))
16 resabs1 5967 . . . . . . . 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 6010 . . . . 5 ((log ↾ (ℂ ∖ (-∞(,]0))) “ (0(ball‘(abs ∘ − ))𝑅)) = ((exp ↾ (log “ (ℂ ∖ (-∞(,]0)))) “ (0(ball‘(abs ∘ − ))𝑅))
20 cnxmet 24136 . . . . . . . . . . . 12 (abs ∘ − ) ∈ (∞Met‘ℂ)
21 0cnd 11148 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 0 ∈ ℂ)
22 rpxr 12924 . . . . . . . . . . . . 13 (𝑅 ∈ ℝ+𝑅 ∈ ℝ*)
2322adantr 481 . . . . . . . . . . . 12 ((𝑅 ∈ ℝ+𝑅 < π) → 𝑅 ∈ ℝ*)
24 blssm 23771 . . . . . . . . . . . 12 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2520, 21, 23, 24mp3an2i 1466 . . . . . . . . . . 11 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ ℂ)
2625sselda 3944 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ ℂ)
2726imcld 15080 . . . . . . . . . . 11 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ ℝ)
28 efopnlem1 26011 . . . . . . . . . . . . 13 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (abs‘(ℑ‘𝑥)) < π)
29 pire 25815 . . . . . . . . . . . . . 14 π ∈ ℝ
30 abslt 15199 . . . . . . . . . . . . . 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 11462 . . . . . . . . . . . . 13 -π ∈ ℝ
3635rexri 11213 . . . . . . . . . . . 12 -π ∈ ℝ*
3729rexri 11213 . . . . . . . . . . . 12 π ∈ ℝ*
38 elioo2 13305 . . . . . . . . . . . 12 ((-π ∈ ℝ* ∧ π ∈ ℝ*) → ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π)))
3936, 37, 38mp2an 690 . . . . . . . . . . 11 ((ℑ‘𝑥) ∈ (-π(,)π) ↔ ((ℑ‘𝑥) ∈ ℝ ∧ -π < (ℑ‘𝑥) ∧ (ℑ‘𝑥) < π))
4027, 33, 34, 39syl3anbrc 1343 . . . . . . . . . 10 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → (ℑ‘𝑥) ∈ (-π(,)π))
41 imf 14998 . . . . . . . . . . 11 ℑ:ℂ⟶ℝ
42 ffn 6668 . . . . . . . . . . 11 (ℑ:ℂ⟶ℝ → ℑ Fn ℂ)
43 elpreima 7008 . . . . . . . . . . 11 (ℑ Fn ℂ → (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π))))
4441, 42, 43mp2b 10 . . . . . . . . . 10 (𝑥 ∈ (ℑ “ (-π(,)π)) ↔ (𝑥 ∈ ℂ ∧ (ℑ‘𝑥) ∈ (-π(,)π)))
4526, 40, 44sylanbrc 583 . . . . . . . . 9 (((𝑅 ∈ ℝ+𝑅 < π) ∧ 𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅)) → 𝑥 ∈ (ℑ “ (-π(,)π)))
4645ex 413 . . . . . . . 8 ((𝑅 ∈ ℝ+𝑅 < π) → (𝑥 ∈ (0(ball‘(abs ∘ − ))𝑅) → 𝑥 ∈ (ℑ “ (-π(,)π))))
4746ssrdv 3950 . . . . . . 7 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (ℑ “ (-π(,)π)))
48 df-ima 5646 . . . . . . . 8 (log “ (ℂ ∖ (-∞(,]0))) = ran (log ↾ (ℂ ∖ (-∞(,]0)))
49 eqid 2736 . . . . . . . . . 10 (ℂ ∖ (-∞(,]0)) = (ℂ ∖ (-∞(,]0))
5049logf1o2 26005 . . . . . . . . 9 (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π))
51 f1ofo 6791 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–1-1-onto→(ℑ “ (-π(,)π)) → (log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)))
52 forn 6759 . . . . . . . . 9 ((log ↾ (ℂ ∖ (-∞(,]0))):(ℂ ∖ (-∞(,]0))–onto→(ℑ “ (-π(,)π)) → ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π)))
5350, 51, 52mp2b 10 . . . . . . . 8 ran (log ↾ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5448, 53eqtri 2764 . . . . . . 7 (log “ (ℂ ∖ (-∞(,]0))) = (ℑ “ (-π(,)π))
5547, 54sseqtrrdi 3995 . . . . . 6 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ⊆ (log “ (ℂ ∖ (-∞(,]0))))
56 resima2 5972 . . . . . 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 26002 . . . . . 6 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((ℂ ∖ (-∞(,]0))–cn→ℂ)
60 difss 4091 . . . . . . 7 (ℂ ∖ (-∞(,]0)) ⊆ ℂ
61 ssid 3966 . . . . . . 7 ℂ ⊆ ℂ
62 efopn.j . . . . . . . 8 𝐽 = (TopOpen‘ℂfld)
63 eqid 2736 . . . . . . . 8 (𝐽t (ℂ ∖ (-∞(,]0))) = (𝐽t (ℂ ∖ (-∞(,]0)))
6462cnfldtopon 24146 . . . . . . . . 9 𝐽 ∈ (TopOn‘ℂ)
6564toponrestid 22270 . . . . . . . 8 𝐽 = (𝐽t ℂ)
6662, 63, 65cncfcn 24273 . . . . . . 7 (((ℂ ∖ (-∞(,]0)) ⊆ ℂ ∧ ℂ ⊆ ℂ) → ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽))
6760, 61, 66mp2an 690 . . . . . 6 ((ℂ ∖ (-∞(,]0))–cn→ℂ) = ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6859, 67eleqtri 2836 . . . . 5 (log ↾ (ℂ ∖ (-∞(,]0))) ∈ ((𝐽t (ℂ ∖ (-∞(,]0))) Cn 𝐽)
6962cnfldtopn 24145 . . . . . . 7 𝐽 = (MetOpen‘(abs ∘ − ))
7069blopn 23856 . . . . . 6 (((abs ∘ − ) ∈ (∞Met‘ℂ) ∧ 0 ∈ ℂ ∧ 𝑅 ∈ ℝ*) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
7120, 21, 23, 70mp3an2i 1466 . . . . 5 ((𝑅 ∈ ℝ+𝑅 < π) → (0(ball‘(abs ∘ − ))𝑅) ∈ 𝐽)
72 cnima 22616 . . . . 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 2839 . . 3 ((𝑅 ∈ ℝ+𝑅 < π) → (exp “ (0(ball‘(abs ∘ − ))𝑅)) ∈ (𝐽t (ℂ ∖ (-∞(,]0))))
7562cnfldtop 24147 . . . 4 𝐽 ∈ Top
7649logdmopn 26004 . . . . 5 (ℂ ∖ (-∞(,]0)) ∈ (TopOpen‘ℂfld)
7776, 62eleqtrri 2837 . . . 4 (ℂ ∖ (-∞(,]0)) ∈ 𝐽
78 restopn2 22528 . . . 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 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 1087   = wceq 1541  wcel 2106  cdif 3907  wss 3910  {csn 4586   class class class wbr 5105  ccnv 5632  ran crn 5634  cres 5635  cima 5636  ccom 5637  Rel wrel 5638  Fun wfun 6490   Fn wfn 6491  wf 6492  ontowfo 6494  1-1-ontowf1o 6495  cfv 6496  (class class class)co 7357  cc 11049  cr 11050  0cc0 11051  -∞cmnf 11187  *cxr 11188   < clt 11189  cmin 11385  -cneg 11386  +crp 12915  (,)cioo 13264  (,]cioc 13265  cim 14983  abscabs 15119  expce 15944  πcpi 15949  t crest 17302  TopOpenctopn 17303  ∞Metcxmet 20781  ballcbl 20783  fldccnfld 20796  Topctop 22242   Cn ccn 22575  cnccncf 24239  logclog 25910
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1797  ax-4 1811  ax-5 1913  ax-6 1971  ax-7 2011  ax-8 2108  ax-9 2116  ax-10 2137  ax-11 2154  ax-12 2171  ax-ext 2707  ax-rep 5242  ax-sep 5256  ax-nul 5263  ax-pow 5320  ax-pr 5384  ax-un 7672  ax-inf2 9577  ax-cnex 11107  ax-resscn 11108  ax-1cn 11109  ax-icn 11110  ax-addcl 11111  ax-addrcl 11112  ax-mulcl 11113  ax-mulrcl 11114  ax-mulcom 11115  ax-addass 11116  ax-mulass 11117  ax-distr 11118  ax-i2m1 11119  ax-1ne0 11120  ax-1rid 11121  ax-rnegex 11122  ax-rrecex 11123  ax-cnre 11124  ax-pre-lttri 11125  ax-pre-lttrn 11126  ax-pre-ltadd 11127  ax-pre-mulgt0 11128  ax-pre-sup 11129  ax-addf 11130  ax-mulf 11131
This theorem depends on definitions:  df-bi 206  df-an 397  df-or 846  df-3or 1088  df-3an 1089  df-tru 1544  df-fal 1554  df-ex 1782  df-nf 1786  df-sb 2068  df-mo 2538  df-eu 2567  df-clab 2714  df-cleq 2728  df-clel 2814  df-nfc 2889  df-ne 2944  df-nel 3050  df-ral 3065  df-rex 3074  df-rmo 3353  df-reu 3354  df-rab 3408  df-v 3447  df-sbc 3740  df-csb 3856  df-dif 3913  df-un 3915  df-in 3917  df-ss 3927  df-pss 3929  df-nul 4283  df-if 4487  df-pw 4562  df-sn 4587  df-pr 4589  df-tp 4591  df-op 4593  df-uni 4866  df-int 4908  df-iun 4956  df-iin 4957  df-br 5106  df-opab 5168  df-mpt 5189  df-tr 5223  df-id 5531  df-eprel 5537  df-po 5545  df-so 5546  df-fr 5588  df-se 5589  df-we 5590  df-xp 5639  df-rel 5640  df-cnv 5641  df-co 5642  df-dm 5643  df-rn 5644  df-res 5645  df-ima 5646  df-pred 6253  df-ord 6320  df-on 6321  df-lim 6322  df-suc 6323  df-iota 6448  df-fun 6498  df-fn 6499  df-f 6500  df-f1 6501  df-fo 6502  df-f1o 6503  df-fv 6504  df-isom 6505  df-riota 7313  df-ov 7360  df-oprab 7361  df-mpo 7362  df-of 7617  df-om 7803  df-1st 7921  df-2nd 7922  df-supp 8093  df-frecs 8212  df-wrecs 8243  df-recs 8317  df-rdg 8356  df-1o 8412  df-2o 8413  df-er 8648  df-map 8767  df-pm 8768  df-ixp 8836  df-en 8884  df-dom 8885  df-sdom 8886  df-fin 8887  df-fsupp 9306  df-fi 9347  df-sup 9378  df-inf 9379  df-oi 9446  df-card 9875  df-pnf 11191  df-mnf 11192  df-xr 11193  df-ltxr 11194  df-le 11195  df-sub 11387  df-neg 11388  df-div 11813  df-nn 12154  df-2 12216  df-3 12217  df-4 12218  df-5 12219  df-6 12220  df-7 12221  df-8 12222  df-9 12223  df-n0 12414  df-z 12500  df-dec 12619  df-uz 12764  df-q 12874  df-rp 12916  df-xneg 13033  df-xadd 13034  df-xmul 13035  df-ioo 13268  df-ioc 13269  df-ico 13270  df-icc 13271  df-fz 13425  df-fzo 13568  df-fl 13697  df-mod 13775  df-seq 13907  df-exp 13968  df-fac 14174  df-bc 14203  df-hash 14231  df-shft 14952  df-cj 14984  df-re 14985  df-im 14986  df-sqrt 15120  df-abs 15121  df-limsup 15353  df-clim 15370  df-rlim 15371  df-sum 15571  df-ef 15950  df-sin 15952  df-cos 15953  df-tan 15954  df-pi 15955  df-struct 17019  df-sets 17036  df-slot 17054  df-ndx 17066  df-base 17084  df-ress 17113  df-plusg 17146  df-mulr 17147  df-starv 17148  df-sca 17149  df-vsca 17150  df-ip 17151  df-tset 17152  df-ple 17153  df-ds 17155  df-unif 17156  df-hom 17157  df-cco 17158  df-rest 17304  df-topn 17305  df-0g 17323  df-gsum 17324  df-topgen 17325  df-pt 17326  df-prds 17329  df-xrs 17384  df-qtop 17389  df-imas 17390  df-xps 17392  df-mre 17466  df-mrc 17467  df-acs 17469  df-mgm 18497  df-sgrp 18546  df-mnd 18557  df-submnd 18602  df-mulg 18873  df-cntz 19097  df-cmn 19564  df-psmet 20788  df-xmet 20789  df-met 20790  df-bl 20791  df-mopn 20792  df-fbas 20793  df-fg 20794  df-cnfld 20797  df-top 22243  df-topon 22260  df-topsp 22282  df-bases 22296  df-cld 22370  df-ntr 22371  df-cls 22372  df-nei 22449  df-lp 22487  df-perf 22488  df-cn 22578  df-cnp 22579  df-haus 22666  df-cmp 22738  df-tx 22913  df-hmeo 23106  df-fil 23197  df-fm 23289  df-flim 23290  df-flf 23291  df-xms 23673  df-ms 23674  df-tms 23675  df-cncf 24241  df-limc 25230  df-dv 25231  df-log 25912
This theorem is referenced by:  efopn  26013
  Copyright terms: Public domain W3C validator