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

Theorem cvrat3 28782
Description: A condition implying that a certain lattice element is an atom. Part of Lemma 3.2.20 of [PtakPulmannova] p. 68. (atcvat3i 22922 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 2256 . . . . . . . . . . . 12  |-  (  <o  `  K )  =  ( 
<o  `  K )
5 cvrat3.a . . . . . . . . . . . 12  |-  A  =  ( Atoms `  K )
61, 2, 3, 4, 5cvr1 28750 . . . . . . . . . . 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 28704 . . . . . . . . . . . . . . . . . 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 28630 . . . . . . . . . . . . . . . . . 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 28630 . . . . . . . . . . . . . . . . . 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 14113 . . . . . . . . . . . . . . . . 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 5794 . . . . . . . . . . . . . . 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 14149 . . . . . . . . . . . . . . . 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 2291 . . . . . . . . . . . . . 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 14104 . . . . . . . . . . . . . . . 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 14120 . . . . . . . . . . . . . . 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 4003 . . . . . . . . . . . 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 14128 . . . . . . . . . . . . . 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 4007 . . . . . . . . . . 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 28716 . . . . . . . . . . . . . 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 14104 . . . . . . . . . . . . . . 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 14120 . . . . . . . . . . . . . 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 14104 . . . . . . . . . . . . . 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 14108 . . . . . . . . . . . . 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 3995 . . . . . . . . 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 28760 . . . . . . 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 14105 . . . . . . 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 28769 . . . . . . 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 2419   class class class wbr 3983   ` cfv 4659  (class class class)co 5778   Basecbs 13096   lecple 13163   joincjn 14026   meetcmee 14027   Latclat 14099    <o ccvr 28603   Atomscatm 28604   HLchlt 28691
This theorem is referenced by:  cvrat4  28783  2atjm  28785  1cvrat  28816  2llnma1b  29126
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 1927  ax-ext 2237  ax-rep 4091  ax-sep 4101  ax-nul 4109  ax-pow 4146  ax-pr 4172  ax-un 4470
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 1884  df-eu 2121  df-mo 2122  df-clab 2243  df-cleq 2249  df-clel 2252  df-nfc 2381  df-ne 2421  df-nel 2422  df-ral 2521  df-rex 2522  df-reu 2523  df-rab 2525  df-v 2759  df-sbc 2953  df-csb 3043  df-dif 3116  df-un 3118  df-in 3120  df-ss 3127  df-nul 3417  df-if 3526  df-pw 3587  df-sn 3606  df-pr 3607  df-op 3609  df-uni 3788  df-iun 3867  df-br 3984  df-opab 4038  df-mpt 4039  df-id 4267  df-xp 4661  df-rel 4662  df-cnv 4663  df-co 4664  df-dm 4665  df-rn 4666  df-res 4667  df-ima 4668  df-fun 4669  df-fn 4670  df-f 4671  df-f1 4672  df-fo 4673  df-f1o 4674  df-fv 4675  df-ov 5781  df-oprab 5782  df-mpt2 5783  df-1st 6042  df-2nd 6043  df-iota 6211  df-undef 6250  df-riota 6258  df-poset 14028  df-plt 14040  df-lub 14056  df-glb 14057  df-join 14058  df-meet 14059  df-p0 14093  df-lat 14100  df-clat 14162  df-oposet 28517  df-ol 28519  df-oml 28520  df-covers 28607  df-ats 28608  df-atl 28639  df-cvlat 28663  df-hlat 28692
  Copyright terms: Public domain W3C validator