Users' Mathboxes Mathbox for Norm Megill < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  cdleme26f2ALTN Structured version   Visualization version   GIF version

Theorem cdleme26f2ALTN 39889
Description: Part of proof of Lemma E in [Crawley] p. 113. cdleme26fALTN 39887 with s and t swapped (this case is not mentioned by them). If s t v, then f(s) fs(t) v. TODO: FIX COMMENT. (Contributed by NM, 1-Feb-2013.) (New usage is discouraged.)
Hypotheses
Ref Expression
cdleme26.b 𝐵 = (Base‘𝐾)
cdleme26.l = (le‘𝐾)
cdleme26.j = (join‘𝐾)
cdleme26.m = (meet‘𝐾)
cdleme26.a 𝐴 = (Atoms‘𝐾)
cdleme26.h 𝐻 = (LHyp‘𝐾)
cdleme26f2.u 𝑈 = ((𝑃 𝑄) 𝑊)
cdleme26f2.f 𝐺 = ((𝑠 𝑈) (𝑄 ((𝑃 𝑠) 𝑊)))
cdleme26f2.n 𝑂 = ((𝑃 𝑄) (𝐺 ((𝑇 𝑠) 𝑊)))
cdleme26f2.e 𝐸 = (𝑢𝐵𝑠𝐴 ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) → 𝑢 = 𝑂))
Assertion
Ref Expression
cdleme26f2ALTN ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐺 (𝐸 𝑉))
Distinct variable groups:   𝑢,𝑠,𝐴   𝐵,𝑠,𝑢   𝐻,𝑠   ,𝑠,𝑢   𝐾,𝑠   ,𝑠,𝑢   ,𝑠,𝑢   𝑢,𝑂   𝑃,𝑠,𝑢   𝑄,𝑠,𝑢   𝑇,𝑠,𝑢   𝑈,𝑠,𝑢   𝑊,𝑠,𝑢
Allowed substitution hints:   𝐸(𝑢,𝑠)   𝐺(𝑢,𝑠)   𝐻(𝑢)   𝐾(𝑢)   𝑂(𝑠)   𝑉(𝑢,𝑠)

Proof of Theorem cdleme26f2ALTN
StepHypRef Expression
1 simp11 1200 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝐾 ∈ HL ∧ 𝑊𝐻))
2 simp23 1205 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑇𝐴 ∧ ¬ 𝑇 𝑊))
3 simp31r 1294 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → ¬ 𝑠 (𝑃 𝑄))
4 simp12r 1284 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝑇 (𝑃 𝑄))
5 simp12l 1283 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝑃𝑄)
63, 4, 53jca 1125 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (¬ 𝑠 (𝑃 𝑄) ∧ 𝑇 (𝑃 𝑄) ∧ 𝑃𝑄))
7 simp21 1203 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑃𝐴 ∧ ¬ 𝑃 𝑊))
8 simp22 1204 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑄𝐴 ∧ ¬ 𝑄 𝑊))
9 simp13 1202 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑠𝐴 ∧ ¬ 𝑠 𝑊))
10 simp32 1207 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑠𝑇𝑠 (𝑇 𝑉)))
11 simp33 1208 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝑉𝐴𝑉 𝑊))
12 cdleme26.l . . . 4 = (le‘𝐾)
13 cdleme26.j . . . 4 = (join‘𝐾)
14 cdleme26.m . . . 4 = (meet‘𝐾)
15 cdleme26.a . . . 4 𝐴 = (Atoms‘𝐾)
16 cdleme26.h . . . 4 𝐻 = (LHyp‘𝐾)
17 cdleme26f2.u . . . 4 𝑈 = ((𝑃 𝑄) 𝑊)
18 cdleme26f2.f . . . 4 𝐺 = ((𝑠 𝑈) (𝑄 ((𝑃 𝑠) 𝑊)))
19 cdleme26f2.n . . . 4 𝑂 = ((𝑃 𝑄) (𝐺 ((𝑇 𝑠) 𝑊)))
2012, 13, 14, 15, 16, 17, 18, 19cdleme22f2 39872 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊) ∧ (¬ 𝑠 (𝑃 𝑄) ∧ 𝑇 (𝑃 𝑄) ∧ 𝑃𝑄)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ ((𝑠𝐴 ∧ ¬ 𝑠 𝑊) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐺 (𝑂 𝑉))
211, 2, 6, 7, 8, 9, 10, 11, 20syl323anc 1397 . 2 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐺 (𝑂 𝑉))
22 simp23l 1291 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝑇𝐴)
23 simp23r 1292 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → ¬ 𝑇 𝑊)
24 cdleme26.b . . . . . 6 𝐵 = (Base‘𝐾)
25 cdleme26f2.e . . . . . 6 𝐸 = (𝑢𝐵𝑠𝐴 ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) → 𝑢 = 𝑂))
2624, 12, 13, 14, 15, 16, 17, 18, 19, 25cdleme25cl 39882 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊) ∧ (𝑃𝑄𝑇 (𝑃 𝑄))) → 𝐸𝐵)
271, 7, 8, 22, 23, 5, 4, 26syl322anc 1395 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐸𝐵)
28 simp13l 1285 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝑠𝐴)
29 simp31 1206 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)))
3024fvexi 6904 . . . . 5 𝐵 ∈ V
3130, 25riotasv 38483 . . . 4 ((𝐸𝐵𝑠𝐴 ∧ (¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄))) → 𝐸 = 𝑂)
3227, 28, 29, 31syl3anc 1368 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐸 = 𝑂)
3332oveq1d 7428 . 2 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → (𝐸 𝑉) = (𝑂 𝑉))
3421, 33breqtrrd 5172 1 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝑄𝑇 (𝑃 𝑄)) ∧ (𝑠𝐴 ∧ ¬ 𝑠 𝑊)) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊) ∧ (𝑇𝐴 ∧ ¬ 𝑇 𝑊)) ∧ ((¬ 𝑠 𝑊 ∧ ¬ 𝑠 (𝑃 𝑄)) ∧ (𝑠𝑇𝑠 (𝑇 𝑉)) ∧ (𝑉𝐴𝑉 𝑊))) → 𝐺 (𝐸 𝑉))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 394  w3a 1084   = wceq 1533  wcel 2098  wne 2930  wral 3051   class class class wbr 5144  cfv 6543  crio 7368  (class class class)co 7413  Basecbs 17174  lecple 17234  joincjn 18297  meetcmee 18298  Atomscatm 38787  HLchlt 38874  LHypclh 39509
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1789  ax-4 1803  ax-5 1905  ax-6 1963  ax-7 2003  ax-8 2100  ax-9 2108  ax-10 2129  ax-11 2146  ax-12 2166  ax-ext 2696  ax-rep 5281  ax-sep 5295  ax-nul 5302  ax-pow 5360  ax-pr 5424  ax-un 7735  ax-riotaBAD 38477
This theorem depends on definitions:  df-bi 206  df-an 395  df-or 846  df-3or 1085  df-3an 1086  df-tru 1536  df-fal 1546  df-ex 1774  df-nf 1778  df-sb 2060  df-mo 2528  df-eu 2557  df-clab 2703  df-cleq 2717  df-clel 2802  df-nfc 2877  df-ne 2931  df-ral 3052  df-rex 3061  df-rmo 3364  df-reu 3365  df-rab 3420  df-v 3465  df-sbc 3771  df-csb 3887  df-dif 3944  df-un 3946  df-in 3948  df-ss 3958  df-nul 4320  df-if 4526  df-pw 4601  df-sn 4626  df-pr 4628  df-op 4632  df-uni 4905  df-iun 4994  df-iin 4995  df-br 5145  df-opab 5207  df-mpt 5228  df-id 5571  df-xp 5679  df-rel 5680  df-cnv 5681  df-co 5682  df-dm 5683  df-rn 5684  df-res 5685  df-ima 5686  df-iota 6495  df-fun 6545  df-fn 6546  df-f 6547  df-f1 6548  df-fo 6549  df-f1o 6550  df-fv 6551  df-riota 7369  df-ov 7416  df-oprab 7417  df-mpo 7418  df-1st 7987  df-2nd 7988  df-undef 8272  df-proset 18281  df-poset 18299  df-plt 18316  df-lub 18332  df-glb 18333  df-join 18334  df-meet 18335  df-p0 18411  df-p1 18412  df-lat 18418  df-clat 18485  df-oposet 38700  df-ol 38702  df-oml 38703  df-covers 38790  df-ats 38791  df-atl 38822  df-cvlat 38846  df-hlat 38875  df-llines 39023  df-lplanes 39024  df-lvols 39025  df-lines 39026  df-psubsp 39028  df-pmap 39029  df-padd 39321  df-lhyp 39513
This theorem is referenced by: (None)
  Copyright terms: Public domain W3C validator