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 35080
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 1091 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ HL)
2 simp12 1092 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐴)
3 simp13 1093 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐴)
4 simp2l 1087 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐵)
5 simp2r 1088 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝑄)
6 simp31 1097 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐶 1 )
7 simp32 1098 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ¬ 𝑃 𝑋)
8 cdlemb.b . . . . 5 𝐵 = (Base‘𝐾)
9 cdlemb.l . . . . 5 = (le‘𝐾)
10 cdlemb.j . . . . 5 = (join‘𝐾)
11 eqid 2622 . . . . 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 34762 . . . 4 ((𝐾 ∈ HL ∧ (𝑃𝐴𝑄𝐴𝑋𝐵) ∧ (𝑃𝑄𝑋𝐶 1 ∧ ¬ 𝑃 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
161, 2, 3, 4, 5, 6, 7, 15syl133anc 1349 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
17 hllat 34650 . . . . . 6 (𝐾 ∈ HL → 𝐾 ∈ Lat)
181, 17syl 17 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ Lat)
198, 14atbase 34576 . . . . . . 7 (𝑃𝐴𝑃𝐵)
202, 19syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐵)
218, 14atbase 34576 . . . . . . 7 (𝑄𝐴𝑄𝐵)
223, 21syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐵)
238, 10latjcl 17051 . . . . . 6 ((𝐾 ∈ Lat ∧ 𝑃𝐵𝑄𝐵) → (𝑃 𝑄) ∈ 𝐵)
2418, 20, 22, 23syl3anc 1326 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → (𝑃 𝑄) ∈ 𝐵)
258, 9, 11latmle2 17077 . . . . 5 ((𝐾 ∈ Lat ∧ (𝑃 𝑄) ∈ 𝐵𝑋𝐵) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
2618, 24, 4, 25syl3anc 1326 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
27 eqid 2622 . . . . 5 (lt‘𝐾) = (lt‘𝐾)
288, 9, 27, 12, 13, 141cvratlt 34760 . . . 4 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ (𝑋𝐶 1 ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
291, 16, 4, 6, 26, 28syl32anc 1334 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
308, 27, 142atlt 34725 . . 3 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
311, 16, 4, 29, 30syl31anc 1329 . 2 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
32 simpl11 1136 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝐾 ∈ HL)
33 simpl12 1137 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝐴)
34 simprl 794 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢𝐴)
35 simpl32 1143 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ¬ 𝑃 𝑋)
36 simprrr 805 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢(lt‘𝐾)𝑋)
37 simpl2l 1114 . . . . . . . . 9 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑋𝐵)
389, 27pltle 16961 . . . . . . . . 9 ((𝐾 ∈ HL ∧ 𝑢𝐴𝑋𝐵) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
3932, 34, 37, 38syl3anc 1326 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
4036, 39mpd 15 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢 𝑋)
41 breq1 4656 . . . . . . 7 (𝑃 = 𝑢 → (𝑃 𝑋𝑢 𝑋))
4240, 41syl5ibrcom 237 . . . . . 6 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑃 = 𝑢𝑃 𝑋))
4342necon3bd 2808 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (¬ 𝑃 𝑋𝑃𝑢))
4435, 43mpd 15 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝑢)
459, 10, 14hlsupr 34672 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑢𝐴) ∧ 𝑃𝑢) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
4632, 33, 34, 44, 45syl31anc 1329 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
47 eqid 2622 . . . . . . . 8 ((𝑃 𝑄)(meet‘𝐾)𝑋) = ((𝑃 𝑄)(meet‘𝐾)𝑋)
488, 9, 10, 12, 13, 14, 27, 11, 47cdlemblem 35079 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) ∧ (𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
49483exp 1264 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → ((𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5049exp4a 633 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))))
5150imp 445 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5251reximdvai 3015 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))
5346, 52mpd 15 . 2 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
5431, 53rexlimddv 3035 1 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 384  w3a 1037   = wceq 1483  wcel 1990  wne 2794  wrex 2913   class class class wbr 4653  cfv 5888  (class class class)co 6650  Basecbs 15857  lecple 15948  ltcplt 16941  joincjn 16944  meetcmee 16945  1.cp1 17038  Latclat 17045  ccvr 34549  Atomscatm 34550  HLchlt 34637
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1722  ax-4 1737  ax-5 1839  ax-6 1888  ax-7 1935  ax-8 1992  ax-9 1999  ax-10 2019  ax-11 2034  ax-12 2047  ax-13 2246  ax-ext 2602  ax-rep 4771  ax-sep 4781  ax-nul 4789  ax-pow 4843  ax-pr 4906  ax-un 6949
This theorem depends on definitions:  df-bi 197  df-or 385  df-an 386  df-3an 1039  df-tru 1486  df-ex 1705  df-nf 1710  df-sb 1881  df-eu 2474  df-mo 2475  df-clab 2609  df-cleq 2615  df-clel 2618  df-nfc 2753  df-ne 2795  df-ral 2917  df-rex 2918  df-reu 2919  df-rab 2921  df-v 3202  df-sbc 3436  df-csb 3534  df-dif 3577  df-un 3579  df-in 3581  df-ss 3588  df-nul 3916  df-if 4087  df-pw 4160  df-sn 4178  df-pr 4180  df-op 4184  df-uni 4437  df-iun 4522  df-br 4654  df-opab 4713  df-mpt 4730  df-id 5024  df-xp 5120  df-rel 5121  df-cnv 5122  df-co 5123  df-dm 5124  df-rn 5125  df-res 5126  df-ima 5127  df-iota 5851  df-fun 5890  df-fn 5891  df-f 5892  df-f1 5893  df-fo 5894  df-f1o 5895  df-fv 5896  df-riota 6611  df-ov 6653  df-oprab 6654  df-preset 16928  df-poset 16946  df-plt 16958  df-lub 16974  df-glb 16975  df-join 16976  df-meet 16977  df-p0 17039  df-p1 17040  df-lat 17046  df-clat 17108  df-oposet 34463  df-ol 34465  df-oml 34466  df-covers 34553  df-ats 34554  df-atl 34585  df-cvlat 34609  df-hlat 34638
This theorem is referenced by:  cdlemb2  35327
  Copyright terms: Public domain W3C validator