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

Theorem ltrncnv 30628
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 2404 . . . 4  |-  ( (
LDil `  K ) `  W )  =  ( ( LDil `  K
) `  W )
3 ltrncnv.t . . . 4  |-  T  =  ( ( LTrn `  K
) `  W )
41, 2, 3ltrnldil 30604 . . 3  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  F  e.  ( ( LDil `  K
) `  W )
)
51, 2ldilcnv 30597 . . 3  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  ( ( LDil `  K
) `  W )
)  ->  `' F  e.  ( ( LDil `  K
) `  W )
)
64, 5syldan 457 . 2  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  `' F  e.  ( ( LDil `  K
) `  W )
)
7 simp1 957 . . . . . 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 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 ) )  ->  ( K  e.  HL  /\  W  e.  H ) )
9 simp1r 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 ) )  ->  F  e.  T )
10 simp2l 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  e.  ( Atoms `  K )
)
11 simp3l 985 . . . . . . 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 2404 . . . . . . . 8  |-  ( le
`  K )  =  ( le `  K
)
13 eqid 2404 . . . . . . . 8  |-  ( Atoms `  K )  =  (
Atoms `  K )
1412, 13, 1, 3ltrncnvel 30624 . . . . . . 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 1188 . . . . . 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 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  e.  ( Atoms `  K )
)
17 simp3r 986 . . . . . . 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 30624 . . . . . . 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 1188 . . . . . 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 2404 . . . . . . 7  |-  ( join `  K )  =  (
join `  K )
21 eqid 2404 . . . . . . 7  |-  ( meet `  K )  =  (
meet `  K )
2212, 20, 21, 13, 1, 3ltrnu 30603 . . . . . 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 1184 . . . . 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 2404 . . . . . . . . . . 11  |-  ( Base `  K )  =  (
Base `  K )
2524, 1, 3ltrn1o 30606 . . . . . . . . . 10  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T
)  ->  F :
( Base `  K ) -1-1-onto-> ( Base `  K ) )
26253ad2ant1 978 . . . . . . . . 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 29772 . . . . . . . . . 10  |-  ( p  e.  ( Atoms `  K
)  ->  p  e.  ( Base `  K )
)
2810, 27syl 16 . . . . . . . . 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 5974 . . . . . . . . 9  |-  ( ( F : ( Base `  K ) -1-1-onto-> ( Base `  K
)  /\  p  e.  ( Base `  K )
)  ->  ( F `  ( `' F `  p ) )  =  p )
3026, 28, 29syl2anc 643 . . . . . . . 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 6056 . . . . . . 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 1020 . . . . . . . 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 30623 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  p  e.  ( Atoms `  K ) )  ->  ( `' F `  p )  e.  (
Atoms `  K ) )
348, 9, 10, 33syl3anc 1184 . . . . . . . 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 29850 . . . . . . . 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 1184 . . . . . . 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 2436 . . . . . 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 6055 . . . . 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 29772 . . . . . . . . . 10  |-  ( q  e.  ( Atoms `  K
)  ->  q  e.  ( Base `  K )
)
4016, 39syl 16 . . . . . . . . 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 5974 . . . . . . . . 9  |-  ( ( F : ( Base `  K ) -1-1-onto-> ( Base `  K
)  /\  q  e.  ( Base `  K )
)  ->  ( F `  ( `' F `  q ) )  =  q )
4226, 40, 41syl2anc 643 . . . . . . . 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 6056 . . . . . . 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 30623 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  W  e.  H )  /\  F  e.  T  /\  q  e.  ( Atoms `  K ) )  ->  ( `' F `  q )  e.  (
Atoms `  K ) )
458, 9, 16, 44syl3anc 1184 . . . . . . . 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 29850 . . . . . . . 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 1184 . . . . . . 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 2436 . . . . . 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 6055 . . . . 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 2444 . . . 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 1152 . . 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 2757 . 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 30601 . . 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 452 . 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 889 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 177    /\ wa 359    /\ w3a 936    = wceq 1649    e. wcel 1721   A.wral 2666   class class class wbr 4172   `'ccnv 4836   -1-1-onto->wf1o 5412   ` cfv 5413  (class class class)co 6040   Basecbs 13424   lecple 13491   joincjn 14356   meetcmee 14357   Atomscatm 29746   HLchlt 29833   LHypclh 30466   LDilcldil 30582   LTrncltrn 30583
This theorem is referenced by:  trlcnv  30647  trlcocnv  31202  trlcoabs2N  31204  trlcoat  31205  trlcocnvat  31206  trlcone  31210  cdlemg46  31217  tgrpgrplem  31231  tendoicl  31278  cdlemh1  31297  cdlemh2  31298  cdlemh  31299  cdlemi2  31301  cdlemi  31302  cdlemk2  31314  cdlemk3  31315  cdlemk4  31316  cdlemk8  31320  cdlemk9  31321  cdlemk9bN  31322  cdlemkvcl  31324  cdlemk10  31325  cdlemk11  31331  cdlemk12  31332  cdlemk14  31336  cdlemk11u  31353  cdlemk12u  31354  cdlemk37  31396  cdlemkfid1N  31403  cdlemkid1  31404  cdlemkid2  31406  tendocnv  31504  tendospcanN  31506  dvhgrp  31590  cdlemn8  31687  dihopelvalcpre  31731  dih1  31769  dihglbcpreN  31783  dihjatcclem3  31903  dihjatcclem4  31904
This theorem was proved from axioms:  ax-1 5  ax-2 6  ax-3 7  ax-mp 8  ax-gen 1552  ax-5 1563  ax-17 1623  ax-9 1662  ax-8 1683  ax-13 1723  ax-14 1725  ax-6 1740  ax-7 1745  ax-11 1757  ax-12 1946  ax-ext 2385  ax-rep 4280  ax-sep 4290  ax-nul 4298  ax-pow 4337  ax-pr 4363  ax-un 4660
This theorem depends on definitions:  df-bi 178  df-or 360  df-an 361  df-3an 938  df-tru 1325  df-ex 1548  df-nf 1551  df-sb 1656  df-eu 2258  df-mo 2259  df-clab 2391  df-cleq 2397  df-clel 2400  df-nfc 2529  df-ne 2569  df-nel 2570  df-ral 2671  df-rex 2672  df-reu 2673  df-rab 2675  df-v 2918  df-sbc 3122  df-csb 3212  df-dif 3283  df-un 3285  df-in 3287  df-ss 3294  df-nul 3589  df-if 3700  df-pw 3761  df-sn 3780  df-pr 3781  df-op 3783  df-uni 3976  df-iun 4055  df-br 4173  df-opab 4227  df-mpt 4228  df-id 4458  df-xp 4843  df-rel 4844  df-cnv 4845  df-co 4846  df-dm 4847  df-rn 4848  df-res 4849  df-ima 4850  df-iota 5377  df-fun 5415  df-fn 5416  df-f 5417  df-f1 5418  df-fo 5419  df-f1o 5420  df-fv 5421  df-ov 6043  df-oprab 6044  df-mpt2 6045  df-1st 6308  df-2nd 6309  df-undef 6502  df-riota 6508  df-map 6979  df-poset 14358  df-plt 14370  df-glb 14387  df-join 14388  df-p0 14423  df-lat 14430  df-oposet 29659  df-ol 29661  df-oml 29662  df-covers 29749  df-ats 29750  df-atl 29781  df-cvlat 29805  df-hlat 29834  df-lhyp 30470  df-laut 30471  df-ldil 30586  df-ltrn 30587
  Copyright terms: Public domain W3C validator