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

Theorem cvrat3 28320
Description: A condition implying that a certain lattice element is an atom. Part of Lemma 3.2.20 of [PtakPulmannova] p. 68. (atcvat3i 22806 analog.) (Contributed by NM, 30-Nov-2011.)
Hypotheses
Ref Expression
cvrat3.b  |-  B  =  ( Base `  K
)
cvrat3.l  |-  .<_  =  ( le `  K )
cvrat3.j  |-  .\/  =  ( join `  K )
cvrat3.m  |-  ./\  =  ( meet `  K )
cvrat3.a  |-  A  =  ( Atoms `  K )
Assertion
Ref Expression
cvrat3  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( P  =/=  Q  /\  -.  Q  .<_  X  /\  P  .<_  ( X  .\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  A
) )

Proof of Theorem cvrat3
StepHypRef Expression
1 cvrat3.b . . . . . . . . . . . 12  |-  B  =  ( Base `  K
)
2 cvrat3.l . . . . . . . . . . . 12  |-  .<_  =  ( le `  K )
3 cvrat3.j . . . . . . . . . . . 12  |-  .\/  =  ( join `  K )
4 eqid 2253 . . . . . . . . . . . 12  |-  (  <o  `  K )  =  ( 
<o  `  K )
5 cvrat3.a . . . . . . . . . . . 12  |-  A  =  ( Atoms `  K )
61, 2, 3, 4, 5cvr1 28288 . . . . . . . . . . 11  |-  ( ( K  e.  HL  /\  X  e.  B  /\  Q  e.  A )  ->  ( -.  Q  .<_  X  <-> 
X (  <o  `  K
) ( X  .\/  Q ) ) )
763adant3r2 1166 . . . . . . . . . 10  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( -.  Q  .<_  X  <->  X (  <o  `  K ) ( X  .\/  Q ) ) )
87biimpa 472 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  -.  Q  .<_  X )  ->  X (  <o  `  K
) ( X  .\/  Q ) )
98adantrr 700 . . . . . . . 8  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  ( -.  Q  .<_  X  /\  P  .<_  ( X  .\/  Q ) ) )  ->  X (  <o  `  K
) ( X  .\/  Q ) )
10 hllat 28242 . . . . . . . . . . . . . . . . . 18  |-  ( K  e.  HL  ->  K  e.  Lat )
1110adantr 453 . . . . . . . . . . . . . . . . 17  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  K  e.  Lat )
12 simpr2 967 . . . . . . . . . . . . . . . . . 18  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  P  e.  A )
131, 5atbase 28168 . . . . . . . . . . . . . . . . . 18  |-  ( P  e.  A  ->  P  e.  B )
1412, 13syl 17 . . . . . . . . . . . . . . . . 17  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  P  e.  B )
15 simpr3 968 . . . . . . . . . . . . . . . . . 18  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  Q  e.  A )
161, 5atbase 28168 . . . . . . . . . . . . . . . . . 18  |-  ( Q  e.  A  ->  Q  e.  B )
1715, 16syl 17 . . . . . . . . . . . . . . . . 17  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  Q  e.  B )
181, 3latjcom 14009 . . . . . . . . . . . . . . . . 17  |-  ( ( K  e.  Lat  /\  P  e.  B  /\  Q  e.  B )  ->  ( P  .\/  Q
)  =  ( Q 
.\/  P ) )
1911, 14, 17, 18syl3anc 1187 . . . . . . . . . . . . . . . 16  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( P  .\/  Q )  =  ( Q  .\/  P
) )
2019oveq2d 5726 . . . . . . . . . . . . . . 15  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  .\/  ( P  .\/  Q ) )  =  ( X  .\/  ( Q 
.\/  P ) ) )
21 simpr1 966 . . . . . . . . . . . . . . . 16  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  X  e.  B )
221, 3latjass 14045 . . . . . . . . . . . . . . . 16  |-  ( ( K  e.  Lat  /\  ( X  e.  B  /\  Q  e.  B  /\  P  e.  B
) )  ->  (
( X  .\/  Q
)  .\/  P )  =  ( X  .\/  ( Q  .\/  P ) ) )
2311, 21, 17, 14, 22syl13anc 1189 . . . . . . . . . . . . . . 15  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( X  .\/  Q
)  .\/  P )  =  ( X  .\/  ( Q  .\/  P ) ) )
2420, 23eqtr4d 2288 . . . . . . . . . . . . . 14  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  .\/  ( P  .\/  Q ) )  =  ( ( X  .\/  Q
)  .\/  P )
)
2524adantr 453 . . . . . . . . . . . . 13  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X  .\/  ( P  .\/  Q ) )  =  ( ( X  .\/  Q
)  .\/  P )
)
261, 3latjcl 14000 . . . . . . . . . . . . . . . 16  |-  ( ( K  e.  Lat  /\  X  e.  B  /\  Q  e.  B )  ->  ( X  .\/  Q
)  e.  B )
2711, 21, 17, 26syl3anc 1187 . . . . . . . . . . . . . . 15  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  .\/  Q )  e.  B )
281, 2, 3latjlej2 14016 . . . . . . . . . . . . . . 15  |-  ( ( K  e.  Lat  /\  ( P  e.  B  /\  ( X  .\/  Q
)  e.  B  /\  ( X  .\/  Q )  e.  B ) )  ->  ( P  .<_  ( X  .\/  Q )  ->  ( ( X 
.\/  Q )  .\/  P )  .<_  ( ( X  .\/  Q )  .\/  ( X  .\/  Q ) ) ) )
2911, 14, 27, 27, 28syl13anc 1189 . . . . . . . . . . . . . 14  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( P  .<_  ( X  .\/  Q )  ->  ( ( X  .\/  Q )  .\/  P )  .<_  ( ( X  .\/  Q )  .\/  ( X  .\/  Q ) ) ) )
3029imp 420 . . . . . . . . . . . . 13  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  (
( X  .\/  Q
)  .\/  P )  .<_  ( ( X  .\/  Q )  .\/  ( X 
.\/  Q ) ) )
3125, 30eqbrtrd 3940 . . . . . . . . . . . 12  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X  .\/  ( P  .\/  Q ) )  .<_  ( ( X  .\/  Q ) 
.\/  ( X  .\/  Q ) ) )
321, 3latjidm 14024 . . . . . . . . . . . . . 14  |-  ( ( K  e.  Lat  /\  ( X  .\/  Q )  e.  B )  -> 
( ( X  .\/  Q )  .\/  ( X 
.\/  Q ) )  =  ( X  .\/  Q ) )
3311, 27, 32syl2anc 645 . . . . . . . . . . . . 13  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( X  .\/  Q
)  .\/  ( X  .\/  Q ) )  =  ( X  .\/  Q
) )
3433adantr 453 . . . . . . . . . . . 12  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  (
( X  .\/  Q
)  .\/  ( X  .\/  Q ) )  =  ( X  .\/  Q
) )
3531, 34breqtrd 3944 . . . . . . . . . . 11  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X  .\/  ( P  .\/  Q ) )  .<_  ( X 
.\/  Q ) )
36 simpl 445 . . . . . . . . . . . . . 14  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  K  e.  HL )
372, 3, 5hlatlej2 28254 . . . . . . . . . . . . . 14  |-  ( ( K  e.  HL  /\  P  e.  A  /\  Q  e.  A )  ->  Q  .<_  ( P  .\/  Q ) )
3836, 12, 15, 37syl3anc 1187 . . . . . . . . . . . . 13  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  Q  .<_  ( P  .\/  Q
) )
391, 3latjcl 14000 . . . . . . . . . . . . . . 15  |-  ( ( K  e.  Lat  /\  P  e.  B  /\  Q  e.  B )  ->  ( P  .\/  Q
)  e.  B )
4011, 14, 17, 39syl3anc 1187 . . . . . . . . . . . . . 14  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( P  .\/  Q )  e.  B )
411, 2, 3latjlej2 14016 . . . . . . . . . . . . . 14  |-  ( ( K  e.  Lat  /\  ( Q  e.  B  /\  ( P  .\/  Q
)  e.  B  /\  X  e.  B )
)  ->  ( Q  .<_  ( P  .\/  Q
)  ->  ( X  .\/  Q )  .<_  ( X 
.\/  ( P  .\/  Q ) ) ) )
4211, 17, 40, 21, 41syl13anc 1189 . . . . . . . . . . . . 13  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( Q  .<_  ( P  .\/  Q )  ->  ( X  .\/  Q )  .<_  ( X 
.\/  ( P  .\/  Q ) ) ) )
4338, 42mpd 16 . . . . . . . . . . . 12  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  .\/  Q )  .<_  ( X  .\/  ( P 
.\/  Q ) ) )
4443adantr 453 . . . . . . . . . . 11  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X  .\/  Q )  .<_  ( X  .\/  ( P 
.\/  Q ) ) )
451, 3latjcl 14000 . . . . . . . . . . . . . 14  |-  ( ( K  e.  Lat  /\  X  e.  B  /\  ( P  .\/  Q )  e.  B )  -> 
( X  .\/  ( P  .\/  Q ) )  e.  B )
4611, 21, 40, 45syl3anc 1187 . . . . . . . . . . . . 13  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  .\/  ( P  .\/  Q ) )  e.  B
)
471, 2latasymb 14004 . . . . . . . . . . . . 13  |-  ( ( K  e.  Lat  /\  ( X  .\/  ( P 
.\/  Q ) )  e.  B  /\  ( X  .\/  Q )  e.  B )  ->  (
( ( X  .\/  ( P  .\/  Q ) )  .<_  ( X  .\/  Q )  /\  ( X  .\/  Q )  .<_  ( X  .\/  ( P 
.\/  Q ) ) )  <->  ( X  .\/  ( P  .\/  Q ) )  =  ( X 
.\/  Q ) ) )
4811, 46, 27, 47syl3anc 1187 . . . . . . . . . . . 12  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( ( X  .\/  ( P  .\/  Q ) )  .<_  ( X  .\/  Q )  /\  ( X  .\/  Q )  .<_  ( X  .\/  ( P 
.\/  Q ) ) )  <->  ( X  .\/  ( P  .\/  Q ) )  =  ( X 
.\/  Q ) ) )
4948adantr 453 . . . . . . . . . . 11  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  (
( ( X  .\/  ( P  .\/  Q ) )  .<_  ( X  .\/  Q )  /\  ( X  .\/  Q )  .<_  ( X  .\/  ( P 
.\/  Q ) ) )  <->  ( X  .\/  ( P  .\/  Q ) )  =  ( X 
.\/  Q ) ) )
5035, 44, 49mpbi2and 892 . . . . . . . . . 10  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X  .\/  ( P  .\/  Q ) )  =  ( X  .\/  Q ) )
5150breq2d 3932 . . . . . . . . 9  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  .<_  ( X  .\/  Q
) )  ->  ( X (  <o  `  K
) ( X  .\/  ( P  .\/  Q ) )  <->  X (  <o  `  K
) ( X  .\/  Q ) ) )
5251adantrl 699 . . . . . . . 8  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  ( -.  Q  .<_  X  /\  P  .<_  ( X  .\/  Q ) ) )  -> 
( X (  <o  `  K ) ( X 
.\/  ( P  .\/  Q ) )  <->  X (  <o  `  K ) ( X  .\/  Q ) ) )
539, 52mpbird 225 . . . . . . 7  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  ( -.  Q  .<_  X  /\  P  .<_  ( X  .\/  Q ) ) )  ->  X (  <o  `  K
) ( X  .\/  ( P  .\/  Q ) ) )
5453ex 425 . . . . . 6  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( -.  Q  .<_  X  /\  P  .<_  ( X 
.\/  Q ) )  ->  X (  <o  `  K ) ( X 
.\/  ( P  .\/  Q ) ) ) )
55 cvrat3.m . . . . . . . 8  |-  ./\  =  ( meet `  K )
561, 3, 55, 4cvrexch 28298 . . . . . . 7  |-  ( ( K  e.  HL  /\  X  e.  B  /\  ( P  .\/  Q )  e.  B )  -> 
( ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K
) ( P  .\/  Q )  <->  X (  <o  `  K
) ( X  .\/  ( P  .\/  Q ) ) ) )
5736, 21, 40, 56syl3anc 1187 . . . . . 6  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( X  ./\  ( P  .\/  Q ) ) (  <o  `  K )
( P  .\/  Q
)  <->  X (  <o  `  K
) ( X  .\/  ( P  .\/  Q ) ) ) )
5854, 57sylibrd 227 . . . . 5  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( -.  Q  .<_  X  /\  P  .<_  ( X 
.\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K
) ( P  .\/  Q ) ) )
5958adantr 453 . . . 4  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  =/=  Q )  ->  (
( -.  Q  .<_  X  /\  P  .<_  ( X 
.\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K
) ( P  .\/  Q ) ) )
601, 55latmcl 14001 . . . . . . 7  |-  ( ( K  e.  Lat  /\  X  e.  B  /\  ( P  .\/  Q )  e.  B )  -> 
( X  ./\  ( P  .\/  Q ) )  e.  B )
6111, 21, 40, 60syl3anc 1187 . . . . . 6  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  B
)
621, 3, 4, 5cvrat2 28307 . . . . . . 7  |-  ( ( K  e.  HL  /\  ( ( X  ./\  ( P  .\/  Q ) )  e.  B  /\  P  e.  A  /\  Q  e.  A )  /\  ( P  =/=  Q  /\  ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K )
( P  .\/  Q
) ) )  -> 
( X  ./\  ( P  .\/  Q ) )  e.  A )
63623expia 1158 . . . . . 6  |-  ( ( K  e.  HL  /\  ( ( X  ./\  ( P  .\/  Q ) )  e.  B  /\  P  e.  A  /\  Q  e.  A )
)  ->  ( ( P  =/=  Q  /\  ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K ) ( P 
.\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  A ) )
6436, 61, 12, 15, 63syl13anc 1189 . . . . 5  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( P  =/=  Q  /\  ( X  ./\  ( P  .\/  Q ) ) (  <o  `  K )
( P  .\/  Q
) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  A
) )
6564expdimp 428 . . . 4  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  =/=  Q )  ->  (
( X  ./\  ( P  .\/  Q ) ) (  <o  `  K )
( P  .\/  Q
)  ->  ( X  ./\  ( P  .\/  Q
) )  e.  A
) )
6659, 65syld 42 . . 3  |-  ( ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  /\  P  =/=  Q )  ->  (
( -.  Q  .<_  X  /\  P  .<_  ( X 
.\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  A ) )
6766exp4b 593 . 2  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  ( P  =/=  Q  ->  ( -.  Q  .<_  X  -> 
( P  .<_  ( X 
.\/  Q )  -> 
( X  ./\  ( P  .\/  Q ) )  e.  A ) ) ) )
68673impd 1170 1  |-  ( ( K  e.  HL  /\  ( X  e.  B  /\  P  e.  A  /\  Q  e.  A
) )  ->  (
( P  =/=  Q  /\  -.  Q  .<_  X  /\  P  .<_  ( X  .\/  Q ) )  ->  ( X  ./\  ( P  .\/  Q ) )  e.  A
) )
Colors of variables: wff set class
Syntax hints:   -. wn 5    -> wi 6    <-> wb 178    /\ wa 360    /\ w3a 939    = wceq 1619    e. wcel 1621    =/= wne 2412   class class class wbr 3920   ` cfv 4592  (class class class)co 5710   Basecbs 13022   lecple 13089   joincjn 13922   meetcmee 13923   Latclat 13995    <o ccvr 28141   Atomscatm 28142   HLchlt 28229
This theorem is referenced by:  cvrat4  28321  2atjm  28323  1cvrat  28354  2llnma1b  28664
This theorem was proved from axioms:  ax-1 7  ax-2 8  ax-3 9  ax-mp 10  ax-5 1533  ax-6 1534  ax-7 1535  ax-gen 1536  ax-8 1623  ax-11 1624  ax-13 1625  ax-14 1626  ax-17 1628  ax-12o 1664  ax-10 1678  ax-9 1684  ax-4 1692  ax-16 1926  ax-ext 2234  ax-rep 4028  ax-sep 4038  ax-nul 4046  ax-pow 4082  ax-pr 4108  ax-un 4403
This theorem depends on definitions:  df-bi 179  df-or 361  df-an 362  df-3an 941  df-tru 1315  df-ex 1538  df-nf 1540  df-sb 1883  df-eu 2118  df-mo 2119  df-clab 2240  df-cleq 2246  df-clel 2249  df-nfc 2374  df-ne 2414  df-nel 2415  df-ral 2513  df-rex 2514  df-reu 2515  df-rab 2516  df-v 2729  df-sbc 2922  df-csb 3010  df-dif 3081  df-un 3083  df-in 3085  df-ss 3089  df-nul 3363  df-if 3471  df-pw 3532  df-sn 3550  df-pr 3551  df-op 3553  df-uni 3728  df-iun 3805  df-br 3921  df-opab 3975  df-mpt 3976  df-id 4202  df-xp 4594  df-rel 4595  df-cnv 4596  df-co 4597  df-dm 4598  df-rn 4599  df-res 4600  df-ima 4601  df-fun 4602  df-fn 4603  df-f 4604  df-f1 4605  df-fo 4606  df-f1o 4607  df-fv 4608  df-ov 5713  df-oprab 5714  df-mpt2 5715  df-1st 5974  df-2nd 5975  df-iota 6143  df-undef 6182  df-riota 6190  df-poset 13924  df-plt 13936  df-lub 13952  df-glb 13953  df-join 13954  df-meet 13955  df-p0 13989  df-lat 13996  df-clat 14058  df-oposet 28055  df-ol 28057  df-oml 28058  df-covers 28145  df-ats 28146  df-atl 28177  df-cvlat 28201  df-hlat 28230
  Copyright terms: Public domain W3C validator