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

Theorem cdlemeg46gfre 35339
Description: TODO FIX COMMENT p. 116 penultimate line: g(f(r)) = r. (Contributed by NM, 4-Apr-2013.)
Hypotheses
Ref Expression
cdlemef46g.b 𝐵 = (Base‘𝐾)
cdlemef46g.l = (le‘𝐾)
cdlemef46g.j = (join‘𝐾)
cdlemef46g.m = (meet‘𝐾)
cdlemef46g.a 𝐴 = (Atoms‘𝐾)
cdlemef46g.h 𝐻 = (LHyp‘𝐾)
cdlemef46g.u 𝑈 = ((𝑃 𝑄) 𝑊)
cdlemef46g.d 𝐷 = ((𝑡 𝑈) (𝑄 ((𝑃 𝑡) 𝑊)))
cdlemefs46g.e 𝐸 = ((𝑃 𝑄) (𝐷 ((𝑠 𝑡) 𝑊)))
cdlemef46g.f 𝐹 = (𝑥𝐵 ↦ if((𝑃𝑄 ∧ ¬ 𝑥 𝑊), (𝑧𝐵𝑠𝐴 ((¬ 𝑠 𝑊 ∧ (𝑠 (𝑥 𝑊)) = 𝑥) → 𝑧 = (if(𝑠 (𝑃 𝑄), (𝑦𝐵𝑡𝐴 ((¬ 𝑡 𝑊 ∧ ¬ 𝑡 (𝑃 𝑄)) → 𝑦 = 𝐸)), 𝑠 / 𝑡𝐷) (𝑥 𝑊)))), 𝑥))
cdlemef46.v 𝑉 = ((𝑄 𝑃) 𝑊)
cdlemef46.n 𝑁 = ((𝑣 𝑉) (𝑃 ((𝑄 𝑣) 𝑊)))
cdlemefs46.o 𝑂 = ((𝑄 𝑃) (𝑁 ((𝑢 𝑣) 𝑊)))
cdlemef46.g 𝐺 = (𝑎𝐵 ↦ if((𝑄𝑃 ∧ ¬ 𝑎 𝑊), (𝑐𝐵𝑢𝐴 ((¬ 𝑢 𝑊 ∧ (𝑢 (𝑎 𝑊)) = 𝑎) → 𝑐 = (if(𝑢 (𝑄 𝑃), (𝑏𝐵𝑣𝐴 ((¬ 𝑣 𝑊 ∧ ¬ 𝑣 (𝑄 𝑃)) → 𝑏 = 𝑂)), 𝑢 / 𝑣𝑁) (𝑎 𝑊)))), 𝑎))
Assertion
Ref Expression
cdlemeg46gfre ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝐺‘(𝐹𝑅)) = 𝑅)
Distinct variable groups:   𝑡,𝑠,𝑥,𝑦,𝑧,𝐴   𝐵,𝑠,𝑡,𝑥,𝑦,𝑧   𝐷,𝑠,𝑥,𝑦,𝑧   𝑥,𝐸,𝑦,𝑧   𝐻,𝑠,𝑡,𝑥,𝑦,𝑧   ,𝑠,𝑡,𝑥,𝑦,𝑧   𝐾,𝑠,𝑡,𝑥,𝑦,𝑧   ,𝑠,𝑡,𝑥,𝑦,𝑧   ,𝑠,𝑡,𝑥,𝑦,𝑧   𝑃,𝑠,𝑡,𝑥,𝑦,𝑧   𝑄,𝑠,𝑡,𝑥,𝑦,𝑧   𝑅,𝑠,𝑡,𝑥,𝑦,𝑧   𝑈,𝑠,𝑡,𝑥,𝑦,𝑧   𝑊,𝑠,𝑡,𝑥,𝑦,𝑧   𝑎,𝑏,𝑐,𝑢,𝑣,𝐴   𝐵,𝑎,𝑏,𝑐,𝑢,𝑣   𝑣,𝐷   𝐺,𝑠,𝑡,𝑥,𝑦,𝑧   𝐻,𝑎,𝑏,𝑐,𝑢,𝑣   ,𝑎,𝑏,𝑐,𝑢,𝑣   𝐾,𝑎,𝑏,𝑐,𝑢,𝑣   ,𝑎,𝑏,𝑐,𝑢,𝑣   ,𝑎,𝑏,𝑐,𝑢,𝑣   𝑁,𝑎,𝑏,𝑐   𝑂,𝑎,𝑏,𝑐   𝑃,𝑎,𝑏,𝑐,𝑢,𝑣   𝑄,𝑎,𝑏,𝑐,𝑢,𝑣   𝑅,𝑎,𝑏,𝑐,𝑢,𝑣   𝑉,𝑎,𝑏,𝑐   𝑊,𝑎,𝑏,𝑐,𝑢,𝑣,𝑥,𝑦,𝑧   𝑢,𝑁,𝑥,𝑦,𝑧   𝑥,𝑂,𝑦,𝑧   𝑣,𝑡   𝑢,𝑉   𝑥,𝑣,𝑦,𝑧,𝑉   𝐷,𝑎,𝑏,𝑐   𝐸,𝑎,𝑏,𝑐   𝐹,𝑎,𝑏,𝑐,𝑢,𝑣   𝑡,𝑁   𝑈,𝑎,𝑏,𝑐,𝑣   𝑡,𝑉   𝑠,𝑎,𝑡,𝑏,𝑐,𝑥,𝑦,𝑧,𝑢,𝑣
Allowed substitution hints:   𝐷(𝑢,𝑡)   𝑈(𝑢)   𝐸(𝑣,𝑢,𝑡,𝑠)   𝐹(𝑥,𝑦,𝑧,𝑡,𝑠)   𝐺(𝑣,𝑢,𝑎,𝑏,𝑐)   𝑁(𝑣,𝑠)   𝑂(𝑣,𝑢,𝑡,𝑠)   𝑉(𝑠)

Proof of Theorem cdlemeg46gfre
Dummy variable 𝑒 is distinct from all other variables.
StepHypRef Expression
1 simp11 1089 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝐾 ∈ HL ∧ 𝑊𝐻))
2 simp12 1090 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝑃𝐴 ∧ ¬ 𝑃 𝑊))
3 simp13 1091 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝑄𝐴 ∧ ¬ 𝑄 𝑊))
4 simp2l 1085 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → 𝑃𝑄)
5 cdlemef46g.l . . . 4 = (le‘𝐾)
6 cdlemef46g.j . . . 4 = (join‘𝐾)
7 cdlemef46g.a . . . 4 𝐴 = (Atoms‘𝐾)
8 cdlemef46g.h . . . 4 𝐻 = (LHyp‘𝐾)
95, 6, 7, 8cdlemb2 34846 . . 3 (((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ ((𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ 𝑃𝑄) → ∃𝑒𝐴𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))
101, 2, 3, 4, 9syl121anc 1328 . 2 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → ∃𝑒𝐴𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))
11 simp1 1059 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → ((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)))
12 simp2l 1085 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → 𝑃𝑄)
13 simp2r 1086 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → (𝑅𝐴 ∧ ¬ 𝑅 𝑊))
14 simp32 1096 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → 𝑒𝐴)
15 simp33l 1186 . . . . . . . 8 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → ¬ 𝑒 𝑊)
1614, 15jca 554 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → (𝑒𝐴 ∧ ¬ 𝑒 𝑊))
17 simp31 1095 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → 𝑅 (𝑃 𝑄))
18 simp33r 1187 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → ¬ 𝑒 (𝑃 𝑄))
19 cdlemef46g.b . . . . . . . 8 𝐵 = (Base‘𝐾)
20 cdlemef46g.m . . . . . . . 8 = (meet‘𝐾)
21 cdlemef46g.u . . . . . . . 8 𝑈 = ((𝑃 𝑄) 𝑊)
22 cdlemef46g.d . . . . . . . 8 𝐷 = ((𝑡 𝑈) (𝑄 ((𝑃 𝑡) 𝑊)))
23 cdlemefs46g.e . . . . . . . 8 𝐸 = ((𝑃 𝑄) (𝐷 ((𝑠 𝑡) 𝑊)))
24 cdlemef46g.f . . . . . . . 8 𝐹 = (𝑥𝐵 ↦ if((𝑃𝑄 ∧ ¬ 𝑥 𝑊), (𝑧𝐵𝑠𝐴 ((¬ 𝑠 𝑊 ∧ (𝑠 (𝑥 𝑊)) = 𝑥) → 𝑧 = (if(𝑠 (𝑃 𝑄), (𝑦𝐵𝑡𝐴 ((¬ 𝑡 𝑊 ∧ ¬ 𝑡 (𝑃 𝑄)) → 𝑦 = 𝐸)), 𝑠 / 𝑡𝐷) (𝑥 𝑊)))), 𝑥))
25 cdlemef46.v . . . . . . . 8 𝑉 = ((𝑄 𝑃) 𝑊)
26 cdlemef46.n . . . . . . . 8 𝑁 = ((𝑣 𝑉) (𝑃 ((𝑄 𝑣) 𝑊)))
27 cdlemefs46.o . . . . . . . 8 𝑂 = ((𝑄 𝑃) (𝑁 ((𝑢 𝑣) 𝑊)))
28 cdlemef46.g . . . . . . . 8 𝐺 = (𝑎𝐵 ↦ if((𝑄𝑃 ∧ ¬ 𝑎 𝑊), (𝑐𝐵𝑢𝐴 ((¬ 𝑢 𝑊 ∧ (𝑢 (𝑎 𝑊)) = 𝑎) → 𝑐 = (if(𝑢 (𝑄 𝑃), (𝑏𝐵𝑣𝐴 ((¬ 𝑣 𝑊 ∧ ¬ 𝑣 (𝑄 𝑃)) → 𝑏 = 𝑂)), 𝑢 / 𝑣𝑁) (𝑎 𝑊)))), 𝑎))
2919, 5, 6, 20, 7, 8, 21, 22, 23, 24, 25, 26, 27, 28cdlemeg46gfr 35338 . . . . . . 7 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊) ∧ (𝑒𝐴 ∧ ¬ 𝑒 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ ¬ 𝑒 (𝑃 𝑄))) → (𝐺‘(𝐹𝑅)) = 𝑅)
3011, 12, 13, 16, 17, 18, 29syl132anc 1341 . . . . . 6 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ (𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)))) → (𝐺‘(𝐹𝑅)) = 𝑅)
31303expia 1264 . . . . 5 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊))) → ((𝑅 (𝑃 𝑄) ∧ 𝑒𝐴 ∧ (¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄))) → (𝐺‘(𝐹𝑅)) = 𝑅))
32313expd 1281 . . . 4 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊))) → (𝑅 (𝑃 𝑄) → (𝑒𝐴 → ((¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)) → (𝐺‘(𝐹𝑅)) = 𝑅))))
33323impia 1258 . . 3 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝑒𝐴 → ((¬ 𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)) → (𝐺‘(𝐹𝑅)) = 𝑅)))
3433rexlimdv 3025 . 2 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (∃𝑒𝐴𝑒 𝑊 ∧ ¬ 𝑒 (𝑃 𝑄)) → (𝐺‘(𝐹𝑅)) = 𝑅))
3510, 34mpd 15 1 ((((𝐾 ∈ HL ∧ 𝑊𝐻) ∧ (𝑃𝐴 ∧ ¬ 𝑃 𝑊) ∧ (𝑄𝐴 ∧ ¬ 𝑄 𝑊)) ∧ (𝑃𝑄 ∧ (𝑅𝐴 ∧ ¬ 𝑅 𝑊)) ∧ 𝑅 (𝑃 𝑄)) → (𝐺‘(𝐹𝑅)) = 𝑅)
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wa 384  w3a 1036   = wceq 1480  wcel 1987  wne 2790  wral 2908  wrex 2909  csb 3519  ifcif 4064   class class class wbr 4623  cmpt 4683  cfv 5857  crio 6575  (class class class)co 6615  Basecbs 15800  lecple 15888  joincjn 16884  meetcmee 16885  Atomscatm 34069  HLchlt 34156  LHypclh 34789
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 4741  ax-sep 4751  ax-nul 4759  ax-pow 4813  ax-pr 4877  ax-un 6914  ax-riotaBAD 33758
This theorem depends on definitions:  df-bi 197  df-or 385  df-an 386  df-3or 1037  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-nel 2894  df-ral 2913  df-rex 2914  df-reu 2915  df-rmo 2916  df-rab 2917  df-v 3192  df-sbc 3423  df-csb 3520  df-dif 3563  df-un 3565  df-in 3567  df-ss 3574  df-nul 3898  df-if 4065  df-pw 4138  df-sn 4156  df-pr 4158  df-op 4162  df-uni 4410  df-iun 4494  df-iin 4495  df-br 4624  df-opab 4684  df-mpt 4685  df-id 4999  df-xp 5090  df-rel 5091  df-cnv 5092  df-co 5093  df-dm 5094  df-rn 5095  df-res 5096  df-ima 5097  df-iota 5820  df-fun 5859  df-fn 5860  df-f 5861  df-f1 5862  df-fo 5863  df-f1o 5864  df-fv 5865  df-riota 6576  df-ov 6618  df-oprab 6619  df-mpt2 6620  df-1st 7128  df-2nd 7129  df-undef 7359  df-preset 16868  df-poset 16886  df-plt 16898  df-lub 16914  df-glb 16915  df-join 16916  df-meet 16917  df-p0 16979  df-p1 16980  df-lat 16986  df-clat 17048  df-oposet 33982  df-ol 33984  df-oml 33985  df-covers 34072  df-ats 34073  df-atl 34104  df-cvlat 34128  df-hlat 34157  df-llines 34303  df-lplanes 34304  df-lvols 34305  df-lines 34306  df-psubsp 34308  df-pmap 34309  df-padd 34601  df-lhyp 34793
This theorem is referenced by:  cdlemeg46gf  35340
  Copyright terms: Public domain W3C validator