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 35575
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 1243 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ HL)
2 simp12 1244 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐴)
3 simp13 1245 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐴)
4 simp2l 1239 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐵)
5 simp2r 1240 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝑄)
6 simp31 1249 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐶 1 )
7 simp32 1250 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ¬ 𝑃 𝑋)
8 cdlemb.b . . . . 5 𝐵 = (Base‘𝐾)
9 cdlemb.l . . . . 5 = (le‘𝐾)
10 cdlemb.j . . . . 5 = (join‘𝐾)
11 eqid 2752 . . . . 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 35257 . . . 4 ((𝐾 ∈ HL ∧ (𝑃𝐴𝑄𝐴𝑋𝐵) ∧ (𝑃𝑄𝑋𝐶 1 ∧ ¬ 𝑃 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
161, 2, 3, 4, 5, 6, 7, 15syl133anc 1496 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
17 hllat 35145 . . . . . 6 (𝐾 ∈ HL → 𝐾 ∈ Lat)
181, 17syl 17 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ Lat)
198, 14atbase 35071 . . . . . . 7 (𝑃𝐴𝑃𝐵)
202, 19syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐵)
218, 14atbase 35071 . . . . . . 7 (𝑄𝐴𝑄𝐵)
223, 21syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐵)
238, 10latjcl 17244 . . . . . 6 ((𝐾 ∈ Lat ∧ 𝑃𝐵𝑄𝐵) → (𝑃 𝑄) ∈ 𝐵)
2418, 20, 22, 23syl3anc 1473 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → (𝑃 𝑄) ∈ 𝐵)
258, 9, 11latmle2 17270 . . . . 5 ((𝐾 ∈ Lat ∧ (𝑃 𝑄) ∈ 𝐵𝑋𝐵) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
2618, 24, 4, 25syl3anc 1473 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
27 eqid 2752 . . . . 5 (lt‘𝐾) = (lt‘𝐾)
288, 9, 27, 12, 13, 141cvratlt 35255 . . . 4 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ (𝑋𝐶 1 ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
291, 16, 4, 6, 26, 28syl32anc 1481 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
308, 27, 142atlt 35220 . . 3 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
311, 16, 4, 29, 30syl31anc 1476 . 2 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
32 simpl11 1312 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝐾 ∈ HL)
33 simpl12 1314 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝐴)
34 simprl 811 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢𝐴)
35 simpl32 1326 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ¬ 𝑃 𝑋)
36 simprrr 824 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢(lt‘𝐾)𝑋)
37 simpl2l 1280 . . . . . . . . 9 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑋𝐵)
389, 27pltle 17154 . . . . . . . . 9 ((𝐾 ∈ HL ∧ 𝑢𝐴𝑋𝐵) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
3932, 34, 37, 38syl3anc 1473 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
4036, 39mpd 15 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢 𝑋)
41 breq1 4799 . . . . . . 7 (𝑃 = 𝑢 → (𝑃 𝑋𝑢 𝑋))
4240, 41syl5ibrcom 237 . . . . . 6 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑃 = 𝑢𝑃 𝑋))
4342necon3bd 2938 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (¬ 𝑃 𝑋𝑃𝑢))
4435, 43mpd 15 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝑢)
459, 10, 14hlsupr 35167 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑢𝐴) ∧ 𝑃𝑢) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
4632, 33, 34, 44, 45syl31anc 1476 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
47 eqid 2752 . . . . . . . 8 ((𝑃 𝑄)(meet‘𝐾)𝑋) = ((𝑃 𝑄)(meet‘𝐾)𝑋)
488, 9, 10, 12, 13, 14, 27, 11, 47cdlemblem 35574 . . . . . . 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 3145 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))
5346, 52mpd 15 . 2 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
5431, 53rexlimddv 3165 1 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 383  w3a 1072   = wceq 1624  wcel 2131  wne 2924  wrex 3043   class class class wbr 4796  cfv 6041  (class class class)co 6805  Basecbs 16051  lecple 16142  ltcplt 17134  joincjn 17137  meetcmee 17138  1.cp1 17231  Latclat 17238  ccvr 35044  Atomscatm 35045  HLchlt 35132
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1863  ax-4 1878  ax-5 1980  ax-6 2046  ax-7 2082  ax-8 2133  ax-9 2140  ax-10 2160  ax-11 2175  ax-12 2188  ax-13 2383  ax-ext 2732  ax-rep 4915  ax-sep 4925  ax-nul 4933  ax-pow 4984  ax-pr 5047  ax-un 7106
This theorem depends on definitions:  df-bi 197  df-or 384  df-an 385  df-3an 1074  df-tru 1627  df-ex 1846  df-nf 1851  df-sb 2039  df-eu 2603  df-mo 2604  df-clab 2739  df-cleq 2745  df-clel 2748  df-nfc 2883  df-ne 2925  df-ral 3047  df-rex 3048  df-reu 3049  df-rab 3051  df-v 3334  df-sbc 3569  df-csb 3667  df-dif 3710  df-un 3712  df-in 3714  df-ss 3721  df-nul 4051  df-if 4223  df-pw 4296  df-sn 4314  df-pr 4316  df-op 4320  df-uni 4581  df-iun 4666  df-br 4797  df-opab 4857  df-mpt 4874  df-id 5166  df-xp 5264  df-rel 5265  df-cnv 5266  df-co 5267  df-dm 5268  df-rn 5269  df-res 5270  df-ima 5271  df-iota 6004  df-fun 6043  df-fn 6044  df-f 6045  df-f1 6046  df-fo 6047  df-f1o 6048  df-fv 6049  df-riota 6766  df-ov 6808  df-oprab 6809  df-preset 17121  df-poset 17139  df-plt 17151  df-lub 17167  df-glb 17168  df-join 17169  df-meet 17170  df-p0 17232  df-p1 17233  df-lat 17239  df-clat 17301  df-oposet 34958  df-ol 34960  df-oml 34961  df-covers 35048  df-ats 35049  df-atl 35080  df-cvlat 35104  df-hlat 35133
This theorem is referenced by:  cdlemb2  35822
  Copyright terms: Public domain W3C validator