Users' Mathboxes Mathbox for Norm Megill < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  ltrncnv Unicode version

Theorem ltrncnv 30404
Description: The converse of a lattice translation is a lattice translation. (Contributed by NM, 10-May-2013.)
Hypotheses
Ref Expression
ltrncnv.h  |-  H  =  ( LHyp `  K
)
ltrncnv.t  |-  T  =  ( ( LTrn `  K
) `  W )
Assertion
Ref Expression
ltrncnv  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  `' F  e.  T )

Proof of Theorem ltrncnv
Dummy variables  q  p are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 ltrncnv.h . . . 4  |-  H  =  ( LHyp `  K
)
2 eqid 2358 . . . 4  |-  ( (
LDil `  K ) `  W )  =  ( ( LDil `  K
) `  W )
3 ltrncnv.t . . . 4  |-  T  =  ( ( LTrn `  K
) `  W )
41, 2, 3ltrnldil 30380 . . 3  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  F  e.  ( ( LDil `  K
) `  W )
)
51, 2ldilcnv 30373 . . 3  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  ( ( LDil `  K
) `  W )
)  ->  `' F  e.  ( ( LDil `  K
) `  W )
)
64, 5syldan 456 . 2  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  `' F  e.  ( ( LDil `  K
) `  W )
)
7 simp1 955 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T ) )
8 simp1l 979 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( K  e.  HL  /\  W  e.  H ) )
9 simp1r 980 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  F  e.  T )
10 simp2l 981 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  p  e.  ( Atoms `  K )
)
11 simp3l 983 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  -.  p
( le `  K
) W )
12 eqid 2358 . . . . . . . 8  |-  ( le
`  K )  =  ( le `  K
)
13 eqid 2358 . . . . . . . 8  |-  ( Atoms `  K )  =  (
Atoms `  K )
1412, 13, 1, 3ltrncnvel 30400 . . . . . . 7  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  ( p  e.  (
Atoms `  K )  /\  -.  p ( le `  K ) W ) )  ->  ( ( `' F `  p )  e.  ( Atoms `  K
)  /\  -.  ( `' F `  p ) ( le `  K
) W ) )
158, 9, 10, 11, 14syl112anc 1186 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  p )  e.  ( Atoms `  K
)  /\  -.  ( `' F `  p ) ( le `  K
) W ) )
16 simp2r 982 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  q  e.  ( Atoms `  K )
)
17 simp3r 984 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  -.  q
( le `  K
) W )
1812, 13, 1, 3ltrncnvel 30400 . . . . . . 7  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  ( q  e.  (
Atoms `  K )  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  q )  e.  ( Atoms `  K
)  /\  -.  ( `' F `  q ) ( le `  K
) W ) )
198, 9, 16, 17, 18syl112anc 1186 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  q )  e.  ( Atoms `  K
)  /\  -.  ( `' F `  q ) ( le `  K
) W ) )
20 eqid 2358 . . . . . . 7  |-  ( join `  K )  =  (
join `  K )
21 eqid 2358 . . . . . . 7  |-  ( meet `  K )  =  (
meet `  K )
2212, 20, 21, 13, 1, 3ltrnu 30379 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
( `' F `  p )  e.  (
Atoms `  K )  /\  -.  ( `' F `  p ) ( le
`  K ) W )  /\  ( ( `' F `  q )  e.  ( Atoms `  K
)  /\  -.  ( `' F `  q ) ( le `  K
) W ) )  ->  ( ( ( `' F `  p ) ( join `  K
) ( F `  ( `' F `  p ) ) ) ( meet `  K ) W )  =  ( ( ( `' F `  q ) ( join `  K
) ( F `  ( `' F `  q ) ) ) ( meet `  K ) W ) )
237, 15, 19, 22syl3anc 1182 . . . . 5  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( (
( `' F `  p ) ( join `  K ) ( F `
 ( `' F `  p ) ) ) ( meet `  K
) W )  =  ( ( ( `' F `  q ) ( join `  K
) ( F `  ( `' F `  q ) ) ) ( meet `  K ) W ) )
24 eqid 2358 . . . . . . . . . . 11  |-  ( Base `  K )  =  (
Base `  K )
2524, 1, 3ltrn1o 30382 . . . . . . . . . 10  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  F :
( Base `  K ) -1-1-onto-> ( Base `  K ) )
26253ad2ant1 976 . . . . . . . . 9  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  F :
( Base `  K ) -1-1-onto-> ( Base `  K ) )
2724, 13atbase 29548 . . . . . . . . . 10  |-  ( p  e.  ( Atoms `  K
)  ->  p  e.  ( Base `  K )
)
2810, 27syl 15 . . . . . . . . 9  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  p  e.  ( Base `  K )
)
29 f1ocnvfv2 5880 . . . . . . . . 9  |-  ( ( F : ( Base `  K ) -1-1-onto-> ( Base `  K
)  /\  p  e.  ( Base `  K )
)  ->  ( F `  ( `' F `  p ) )  =  p )
3026, 28, 29syl2anc 642 . . . . . . . 8  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( F `  ( `' F `  p ) )  =  p )
3130oveq2d 5961 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  p ) ( join `  K
) ( F `  ( `' F `  p ) ) )  =  ( ( `' F `  p ) ( join `  K ) p ) )
32 simp1ll 1018 . . . . . . . 8  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  K  e.  HL )
3312, 13, 1, 3ltrncnvat 30399 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  p  e.  ( Atoms `  K ) )  ->  ( `' F `  p )  e.  (
Atoms `  K ) )
348, 9, 10, 33syl3anc 1182 . . . . . . . 8  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( `' F `  p )  e.  ( Atoms `  K )
)
3520, 13hlatjcom 29626 . . . . . . . 8  |-  ( ( K  e.  HL  /\  ( `' F `  p )  e.  ( Atoms `  K
)  /\  p  e.  ( Atoms `  K )
)  ->  ( ( `' F `  p ) ( join `  K
) p )  =  ( p ( join `  K ) ( `' F `  p ) ) )
3632, 34, 10, 35syl3anc 1182 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  p ) ( join `  K
) p )  =  ( p ( join `  K ) ( `' F `  p ) ) )
3731, 36eqtrd 2390 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  p ) ( join `  K
) ( F `  ( `' F `  p ) ) )  =  ( p ( join `  K
) ( `' F `  p ) ) )
3837oveq1d 5960 . . . . 5  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( (
( `' F `  p ) ( join `  K ) ( F `
 ( `' F `  p ) ) ) ( meet `  K
) W )  =  ( ( p (
join `  K )
( `' F `  p ) ) (
meet `  K ) W ) )
3924, 13atbase 29548 . . . . . . . . . 10  |-  ( q  e.  ( Atoms `  K
)  ->  q  e.  ( Base `  K )
)
4016, 39syl 15 . . . . . . . . 9  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  q  e.  ( Base `  K )
)
41 f1ocnvfv2 5880 . . . . . . . . 9  |-  ( ( F : ( Base `  K ) -1-1-onto-> ( Base `  K
)  /\  q  e.  ( Base `  K )
)  ->  ( F `  ( `' F `  q ) )  =  q )
4226, 40, 41syl2anc 642 . . . . . . . 8  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( F `  ( `' F `  q ) )  =  q )
4342oveq2d 5961 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  q ) ( join `  K
) ( F `  ( `' F `  q ) ) )  =  ( ( `' F `  q ) ( join `  K ) q ) )
4412, 13, 1, 3ltrncnvat 30399 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  q  e.  ( Atoms `  K ) )  ->  ( `' F `  q )  e.  (
Atoms `  K ) )
458, 9, 16, 44syl3anc 1182 . . . . . . . 8  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( `' F `  q )  e.  ( Atoms `  K )
)
4620, 13hlatjcom 29626 . . . . . . . 8  |-  ( ( K  e.  HL  /\  ( `' F `  q )  e.  ( Atoms `  K
)  /\  q  e.  ( Atoms `  K )
)  ->  ( ( `' F `  q ) ( join `  K
) q )  =  ( q ( join `  K ) ( `' F `  q ) ) )
4732, 45, 16, 46syl3anc 1182 . . . . . . 7  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  q ) ( join `  K
) q )  =  ( q ( join `  K ) ( `' F `  q ) ) )
4843, 47eqtrd 2390 . . . . . 6  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( ( `' F `  q ) ( join `  K
) ( F `  ( `' F `  q ) ) )  =  ( q ( join `  K
) ( `' F `  q ) ) )
4948oveq1d 5960 . . . . 5  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( (
( `' F `  q ) ( join `  K ) ( F `
 ( `' F `  q ) ) ) ( meet `  K
) W )  =  ( ( q (
join `  K )
( `' F `  q ) ) (
meet `  K ) W ) )
5023, 38, 493eqtr3d 2398 . . . 4  |-  ( ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T )  /\  (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  /\  ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W ) )  ->  ( (
p ( join `  K
) ( `' F `  p ) ) (
meet `  K ) W )  =  ( ( q ( join `  K ) ( `' F `  q ) ) ( meet `  K
) W ) )
51503exp 1150 . . 3  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  ( (
p  e.  ( Atoms `  K )  /\  q  e.  ( Atoms `  K )
)  ->  ( ( -.  p ( le `  K ) W  /\  -.  q ( le `  K ) W )  ->  ( ( p ( join `  K
) ( `' F `  p ) ) (
meet `  K ) W )  =  ( ( q ( join `  K ) ( `' F `  q ) ) ( meet `  K
) W ) ) ) )
5251ralrimivv 2710 . 2  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  A. p  e.  ( Atoms `  K ) A. q  e.  ( Atoms `  K ) ( ( -.  p ( le `  K ) W  /\  -.  q
( le `  K
) W )  -> 
( ( p (
join `  K )
( `' F `  p ) ) (
meet `  K ) W )  =  ( ( q ( join `  K ) ( `' F `  q ) ) ( meet `  K
) W ) ) )
5312, 20, 21, 13, 1, 2, 3isltrn 30377 . . 3  |-  ( ( K  e.  HL  /\  W  e.  H )  ->  ( `' F  e.  T  <->  ( `' F  e.  ( ( LDil `  K
) `  W )  /\  A. p  e.  (
Atoms `  K ) A. q  e.  ( Atoms `  K ) ( ( -.  p ( le
`  K ) W  /\  -.  q ( le `  K ) W )  ->  (
( p ( join `  K ) ( `' F `  p ) ) ( meet `  K
) W )  =  ( ( q (
join `  K )
( `' F `  q ) ) (
meet `  K ) W ) ) ) ) )
5453adantr 451 . 2  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  ( `' F  e.  T  <->  ( `' F  e.  ( ( LDil `  K ) `  W )  /\  A. p  e.  ( Atoms `  K ) A. q  e.  ( Atoms `  K )
( ( -.  p
( le `  K
) W  /\  -.  q ( le `  K ) W )  ->  ( ( p ( join `  K
) ( `' F `  p ) ) (
meet `  K ) W )  =  ( ( q ( join `  K ) ( `' F `  q ) ) ( meet `  K
) W ) ) ) ) )
556, 52, 54mpbir2and 888 1  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  `' F  e.  T )
Colors of variables: wff set class
Syntax hints:   -. wn 3    -> wi 4    <-> wb 176    /\ wa 358    /\ w3a 934    = wceq 1642    e. wcel 1710   A.wral 2619   class class class wbr 4104   `'ccnv 4770   -1-1-onto->wf1o 5336   ` cfv 5337  (class class class)co 5945   Basecbs 13245   lecple 13312   joincjn 14177   meetcmee 14178   Atomscatm 29522   HLchlt 29609   LHypclh 30242   LDilcldil 30358   LTrncltrn 30359
This theorem is referenced by:  trlcnv  30423  trlcocnv  30978  trlcoabs2N  30980  trlcoat  30981  trlcocnvat  30982  trlcone  30986  cdlemg46  30993  tgrpgrplem  31007  tendoicl  31054  cdlemh1  31073  cdlemh2  31074  cdlemh  31075  cdlemi2  31077  cdlemi  31078  cdlemk2  31090  cdlemk3  31091  cdlemk4  31092  cdlemk8  31096  cdlemk9  31097  cdlemk9bN  31098  cdlemkvcl  31100  cdlemk10  31101  cdlemk11  31107  cdlemk12  31108  cdlemk14  31112  cdlemk11u  31129  cdlemk12u  31130  cdlemk37  31172  cdlemkfid1N  31179  cdlemkid1  31180  cdlemkid2  31182  tendocnv  31280  tendospcanN  31282  dvhgrp  31366  cdlemn8  31463  dihopelvalcpre  31507  dih1  31545  dihglbcpreN  31559  dihjatcclem3  31679  dihjatcclem4  31680
This theorem was proved from axioms:  ax-1 5  ax-2 6  ax-3 7  ax-mp 8  ax-gen 1546  ax-5 1557  ax-17 1616  ax-9 1654  ax-8 1675  ax-13 1712  ax-14 1714  ax-6 1729  ax-7 1734  ax-11 1746  ax-12 1930  ax-ext 2339  ax-rep 4212  ax-sep 4222  ax-nul 4230  ax-pow 4269  ax-pr 4295  ax-un 4594
This theorem depends on definitions:  df-bi 177  df-or 359  df-an 360  df-3an 936  df-tru 1319  df-ex 1542  df-nf 1545  df-sb 1649  df-eu 2213  df-mo 2214  df-clab 2345  df-cleq 2351  df-clel 2354  df-nfc 2483  df-ne 2523  df-nel 2524  df-ral 2624  df-rex 2625  df-reu 2626  df-rab 2628  df-v 2866  df-sbc 3068  df-csb 3158  df-dif 3231  df-un 3233  df-in 3235  df-ss 3242  df-nul 3532  df-if 3642  df-pw 3703  df-sn 3722  df-pr 3723  df-op 3725  df-uni 3909  df-iun 3988  df-br 4105  df-opab 4159  df-mpt 4160  df-id 4391  df-xp 4777  df-rel 4778  df-cnv 4779  df-co 4780  df-dm 4781  df-rn 4782  df-res 4783  df-ima 4784  df-iota 5301  df-fun 5339  df-fn 5340  df-f 5341  df-f1 5342  df-fo 5343  df-f1o 5344  df-fv 5345  df-ov 5948  df-oprab 5949  df-mpt2 5950  df-1st 6209  df-2nd 6210  df-undef 6385  df-riota 6391  df-map 6862  df-poset 14179  df-plt 14191  df-glb 14208  df-join 14209  df-p0 14244  df-lat 14251  df-oposet 29435  df-ol 29437  df-oml 29438  df-covers 29525  df-ats 29526  df-atl 29557  df-cvlat 29581  df-hlat 29610  df-lhyp 30246  df-laut 30247  df-ldil 30362  df-ltrn 30363
  Copyright terms: Public domain W3C validator