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 34557
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 1089 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ HL)
2 simp12 1090 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐴)
3 simp13 1091 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐴)
4 simp2l 1085 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐵)
5 simp2r 1086 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝑄)
6 simp31 1095 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑋𝐶 1 )
7 simp32 1096 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ¬ 𝑃 𝑋)
8 cdlemb.b . . . . 5 𝐵 = (Base‘𝐾)
9 cdlemb.l . . . . 5 = (le‘𝐾)
10 cdlemb.j . . . . 5 = (join‘𝐾)
11 eqid 2621 . . . . 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 34239 . . . 4 ((𝐾 ∈ HL ∧ (𝑃𝐴𝑄𝐴𝑋𝐵) ∧ (𝑃𝑄𝑋𝐶 1 ∧ ¬ 𝑃 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
161, 2, 3, 4, 5, 6, 7, 15syl133anc 1346 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴)
17 hllat 34127 . . . . . 6 (𝐾 ∈ HL → 𝐾 ∈ Lat)
181, 17syl 17 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝐾 ∈ Lat)
198, 14atbase 34053 . . . . . . 7 (𝑃𝐴𝑃𝐵)
202, 19syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑃𝐵)
218, 14atbase 34053 . . . . . . 7 (𝑄𝐴𝑄𝐵)
223, 21syl 17 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → 𝑄𝐵)
238, 10latjcl 16972 . . . . . 6 ((𝐾 ∈ Lat ∧ 𝑃𝐵𝑄𝐵) → (𝑃 𝑄) ∈ 𝐵)
2418, 20, 22, 23syl3anc 1323 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → (𝑃 𝑄) ∈ 𝐵)
258, 9, 11latmle2 16998 . . . . 5 ((𝐾 ∈ Lat ∧ (𝑃 𝑄) ∈ 𝐵𝑋𝐵) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
2618, 24, 4, 25syl3anc 1323 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)
27 eqid 2621 . . . . 5 (lt‘𝐾) = (lt‘𝐾)
288, 9, 27, 12, 13, 141cvratlt 34237 . . . 4 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ (𝑋𝐶 1 ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
291, 16, 4, 6, 26, 28syl32anc 1331 . . 3 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋)
308, 27, 142atlt 34202 . . 3 (((𝐾 ∈ HL ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∈ 𝐴𝑋𝐵) ∧ ((𝑃 𝑄)(meet‘𝐾)𝑋)(lt‘𝐾)𝑋) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
311, 16, 4, 29, 30syl31anc 1326 . 2 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑢𝐴 (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))
32 simpl11 1134 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝐾 ∈ HL)
33 simpl12 1135 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝐴)
34 simprl 793 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢𝐴)
35 simpl32 1141 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ¬ 𝑃 𝑋)
36 simprrr 804 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢(lt‘𝐾)𝑋)
37 simpl2l 1112 . . . . . . . . 9 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑋𝐵)
389, 27pltle 16882 . . . . . . . . 9 ((𝐾 ∈ HL ∧ 𝑢𝐴𝑋𝐵) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
3932, 34, 37, 38syl3anc 1323 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑢(lt‘𝐾)𝑋𝑢 𝑋))
4036, 39mpd 15 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑢 𝑋)
41 breq1 4616 . . . . . . 7 (𝑃 = 𝑢 → (𝑃 𝑋𝑢 𝑋))
4240, 41syl5ibrcom 237 . . . . . 6 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑃 = 𝑢𝑃 𝑋))
4342necon3bd 2804 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (¬ 𝑃 𝑋𝑃𝑢))
4435, 43mpd 15 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → 𝑃𝑢)
459, 10, 14hlsupr 34149 . . . 4 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑢𝐴) ∧ 𝑃𝑢) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
4632, 33, 34, 44, 45syl31anc 1326 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))
47 eqid 2621 . . . . . . . 8 ((𝑃 𝑄)(meet‘𝐾)𝑋) = ((𝑃 𝑄)(meet‘𝐾)𝑋)
488, 9, 10, 12, 13, 14, 27, 11, 47cdlemblem 34556 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) ∧ (𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
49483exp 1261 . . . . . 6 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → ((𝑟𝐴 ∧ (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢))) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5049exp4a 632 . . . . 5 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ((𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋)) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))))
5150imp 445 . . . 4 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (𝑟𝐴 → ((𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → (¬ 𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))))
5251reximdvai 3009 . . 3 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → (∃𝑟𝐴 (𝑟𝑃𝑟𝑢𝑟 (𝑃 𝑢)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄))))
5346, 52mpd 15 . 2 ((((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) ∧ (𝑢𝐴 ∧ (𝑢 ≠ ((𝑃 𝑄)(meet‘𝐾)𝑋) ∧ 𝑢(lt‘𝐾)𝑋))) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
5431, 53rexlimddv 3028 1 (((𝐾 ∈ HL ∧ 𝑃𝐴𝑄𝐴) ∧ (𝑋𝐵𝑃𝑄) ∧ (𝑋𝐶 1 ∧ ¬ 𝑃 𝑋 ∧ ¬ 𝑄 𝑋)) → ∃𝑟𝐴𝑟 𝑋 ∧ ¬ 𝑟 (𝑃 𝑄)))
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 384  w3a 1036   = wceq 1480  wcel 1987  wne 2790  wrex 2908   class class class wbr 4613  cfv 5847  (class class class)co 6604  Basecbs 15781  lecple 15869  ltcplt 16862  joincjn 16865  meetcmee 16866  1.cp1 16959  Latclat 16966  ccvr 34026  Atomscatm 34027  HLchlt 34114
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1719  ax-4 1734  ax-5 1836  ax-6 1885  ax-7 1932  ax-8 1989  ax-9 1996  ax-10 2016  ax-11 2031  ax-12 2044  ax-13 2245  ax-ext 2601  ax-rep 4731  ax-sep 4741  ax-nul 4749  ax-pow 4803  ax-pr 4867  ax-un 6902
This theorem depends on definitions:  df-bi 197  df-or 385  df-an 386  df-3an 1038  df-tru 1483  df-ex 1702  df-nf 1707  df-sb 1878  df-eu 2473  df-mo 2474  df-clab 2608  df-cleq 2614  df-clel 2617  df-nfc 2750  df-ne 2791  df-ral 2912  df-rex 2913  df-reu 2914  df-rab 2916  df-v 3188  df-sbc 3418  df-csb 3515  df-dif 3558  df-un 3560  df-in 3562  df-ss 3569  df-nul 3892  df-if 4059  df-pw 4132  df-sn 4149  df-pr 4151  df-op 4155  df-uni 4403  df-iun 4487  df-br 4614  df-opab 4674  df-mpt 4675  df-id 4989  df-xp 5080  df-rel 5081  df-cnv 5082  df-co 5083  df-dm 5084  df-rn 5085  df-res 5086  df-ima 5087  df-iota 5810  df-fun 5849  df-fn 5850  df-f 5851  df-f1 5852  df-fo 5853  df-f1o 5854  df-fv 5855  df-riota 6565  df-ov 6607  df-oprab 6608  df-preset 16849  df-poset 16867  df-plt 16879  df-lub 16895  df-glb 16896  df-join 16897  df-meet 16898  df-p0 16960  df-p1 16961  df-lat 16967  df-clat 17029  df-oposet 33940  df-ol 33942  df-oml 33943  df-covers 34030  df-ats 34031  df-atl 34062  df-cvlat 34086  df-hlat 34115
This theorem is referenced by:  cdlemb2  34804
  Copyright terms: Public domain W3C validator