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

Theorem cdlemb 35552
Description: Given two atoms not less than or equal to an element covered by 1, there is a third. Lemma B in [Crawley] p. 112. (Contributed by NM, 8-May-2012.)
Hypotheses
Ref Expression
cdlemb.b 𝐵 = (Base‘𝐾)
cdlemb.l = (le‘𝐾)
cdlemb.j = (join‘𝐾)
cdlemb.u 1 = (1.‘𝐾)
cdlemb.c 𝐶 = ( ⋖ ‘𝐾)
cdlemb.a 𝐴 = (Atoms‘𝐾)
Assertion
Ref Expression
cdlemb (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
Distinct variable groups:   𝐴,𝑟   𝐵,𝑟   𝐶,𝑟   ,𝑟   𝐾,𝑟   ,𝑟   𝑃,𝑟   𝑄,𝑟   1 ,𝑟   𝑋,𝑟

Proof of Theorem cdlemb
Dummy variable 𝑢 is distinct from all other variables.
StepHypRef Expression
1 simp11 1222 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ HL)
2 simp12 1223 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐴)
3 simp13 1224 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐴)
4 simp2l 1218 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐵)
5 simp2r 1219 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝑄)
6 simp31 1228 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐶 1 )
7 simp32 1229 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ¬ 𝑃 𝑋)
8 cdlemb.b . . . . 5 𝐵 = (Base‘𝐾)
9 cdlemb.l . . . . 5 = (le‘𝐾)
10 cdlemb.j . . . . 5 = (join‘𝐾)
11 eqid 2748 . . . . 5 (meet‘𝐾) = (meet‘𝐾)
12 cdlemb.u . . . . 5 1 = (1.‘𝐾)
13 cdlemb.c . . . . 5 𝐶 = ( ⋖ ‘𝐾)
14 cdlemb.a . . . . 5 𝐴 = (Atoms‘𝐾)
158, 9, 10, 11, 12, 13, 141cvrat 35234 . . . 4 ((𝐾 ∈ HL ∧ (𝑃𝐴𝑄𝐴𝑋𝐵) ∧ (𝑃𝑄𝑋𝐶 1 ∧ ¬ 𝑃 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
161, 2, 3, 4, 5, 6, 7, 15syl133anc 1486 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
17 hllat 35122 . . . . . 6 (𝐾 ∈ HL → 𝐾 ∈ Lat)
181, 17syl 17 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ Lat)
198, 14atbase 35048 . . . . . . 7 (𝑃𝐴𝑃𝐵)
202, 19syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐵)
218, 14atbase 35048 . . . . . . 7 (𝑄𝐴𝑄𝐵)
223, 21syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐵)
238, 10latjcl 17223 . . . . . 6 ((𝐾 ∈ Lat ∧ 𝑃𝐵𝑄𝐵) → (𝑃 𝑄) ∈ 𝐵)
2418, 20, 22, 23syl3anc 1463 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → (𝑃 𝑄) ∈ 𝐵)
258, 9, 11latmle2 17249 . . . . 5 ((𝐾 ∈ Lat ∧ (𝑃 𝑄) ∈ 𝐵𝑋𝐵) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
2618, 24, 4, 25syl3anc 1463 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
27 eqid 2748 . . . . 5 (lt‘𝐾) = (lt‘𝐾)
288, 9, 27, 12, 13, 141cvratlt 35232 . . . 4 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ (𝑋𝐶 1 ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
291, 16, 4, 6, 26, 28syl32anc 1471 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
308, 27, 142atlt 35197 . . 3 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
311, 16, 4, 29, 30syl31anc 1466 . 2 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
32 simpl11 1291 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝐾 ∈ HL)
33 simpl12 1293 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝐴)
34 simprl 811 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢𝐴)
35 simpl32 1305 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ¬ 𝑃 𝑋)
36 simprrr 824 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢(lt‘𝐾)𝑋)
37 simpl2l 1259 . . . . . . . . 9 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑋𝐵)
389, 27pltle 17133 . . . . . . . . 9 ((𝐾 ∈ HL ∧ 𝑢𝐴𝑋𝐵) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
3932, 34, 37, 38syl3anc 1463 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
4036, 39mpd 15 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢 𝑋)
41 breq1 4795 . . . . . . 7 (𝑃 = 𝑢 → (𝑃 𝑋𝑢 𝑋))
4240, 41syl5ibrcom 237 . . . . . 6 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑃 = 𝑢𝑃 𝑋))
4342necon3bd 2934 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (¬ 𝑃 𝑋𝑃𝑢))
4435, 43mpd 15 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝑢)
459, 10, 14hlsupr 35144 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑢𝐴) ∧ 𝑃𝑢) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
4632, 33, 34, 44, 45syl31anc 1466 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
47 eqid 2748 . . . . . . . 8 ((𝑃 𝑄)(meet‘𝐾)𝑋) = ((𝑃 𝑄)(meet‘𝐾)𝑋)
488, 9, 10, 12, 13, 14, 27, 11, 47cdlemblem 35551 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) ∧ (𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
49483exp 1112 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → ((𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5049exp4a 634 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))))
5150imp 444 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5251reximdvai 3141 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))
5346, 52mpd 15 . 2 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
5431, 53rexlimddv 3161 1 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 383  w3a 1072   = wceq 1620  wcel 2127  wne 2920  wrex 3039   class class class wbr 4792  cfv 6037  (class class class)co 6801  Basecbs 16030  lecple 16121  ltcplt 17113  joincjn 17116  meetcmee 17117  1.cp1 17210  Latclat 17217  ccvr 35021  Atomscatm 35022  HLchlt 35109
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1859  ax-4 1874  ax-5 1976  ax-6 2042  ax-7 2078  ax-8 2129  ax-9 2136  ax-10 2156  ax-11 2171  ax-12 2184  ax-13 2379  ax-ext 2728  ax-rep 4911  ax-sep 4921  ax-nul 4929  ax-pow 4980  ax-pr 5043  ax-un 7102
This theorem depends on definitions:  df-bi 197  df-or 384  df-an 385  df-3an 1074  df-tru 1623  df-ex 1842  df-nf 1847  df-sb 2035  df-eu 2599  df-mo 2600  df-clab 2735  df-cleq 2741  df-clel 2744  df-nfc 2879  df-ne 2921  df-ral 3043  df-rex 3044  df-reu 3045  df-rab 3047  df-v 3330  df-sbc 3565  df-csb 3663  df-dif 3706  df-un 3708  df-in 3710  df-ss 3717  df-nul 4047  df-if 4219  df-pw 4292  df-sn 4310  df-pr 4312  df-op 4316  df-uni 4577  df-iun 4662  df-br 4793  df-opab 4853  df-mpt 4870  df-id 5162  df-xp 5260  df-rel 5261  df-cnv 5262  df-co 5263  df-dm 5264  df-rn 5265  df-res 5266  df-ima 5267  df-iota 6000  df-fun 6039  df-fn 6040  df-f 6041  df-f1 6042  df-fo 6043  df-f1o 6044  df-fv 6045  df-riota 6762  df-ov 6804  df-oprab 6805  df-preset 17100  df-poset 17118  df-plt 17130  df-lub 17146  df-glb 17147  df-join 17148  df-meet 17149  df-p0 17211  df-p1 17212  df-lat 17218  df-clat 17280  df-oposet 34935  df-ol 34937  df-oml 34938  df-covers 35025  df-ats 35026  df-atl 35057  df-cvlat 35081  df-hlat 35110
This theorem is referenced by:  cdlemb2  35799
  Copyright terms: Public domain W3C validator