MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  ordtbaslem Structured version   Visualization version   GIF version

Theorem ordtbaslem 21798
Description: Lemma for ordtbas 21802. In a total order, unbounded-above intervals are closed under intersection. (Contributed by Mario Carneiro, 3-Sep-2015.)
Hypotheses
Ref Expression
ordtval.1 𝑋 = dom 𝑅
ordtval.2 𝐴 = ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})
Assertion
Ref Expression
ordtbaslem (𝑅 ∈ TosetRel → (fi‘𝐴) = 𝐴)
Distinct variable groups:   𝑥,𝑦,𝑅   𝑥,𝑋,𝑦
Allowed substitution hints:   𝐴(𝑥,𝑦)

Proof of Theorem ordtbaslem
Dummy variables 𝑎 𝑏 𝑤 𝑧 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 3anrot 1096 . . . . . . . . . . . . 13 ((𝑦𝑋𝑎𝑋𝑏𝑋) ↔ (𝑎𝑋𝑏𝑋𝑦𝑋))
2 ordtval.1 . . . . . . . . . . . . . 14 𝑋 = dom 𝑅
32tsrlemax 17832 . . . . . . . . . . . . 13 ((𝑅 ∈ TosetRel ∧ (𝑦𝑋𝑎𝑋𝑏𝑋)) → (𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ (𝑦𝑅𝑎𝑦𝑅𝑏)))
41, 3sylan2br 596 . . . . . . . . . . . 12 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋𝑦𝑋)) → (𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ (𝑦𝑅𝑎𝑦𝑅𝑏)))
543exp2 1350 . . . . . . . . . . 11 (𝑅 ∈ TosetRel → (𝑎𝑋 → (𝑏𝑋 → (𝑦𝑋 → (𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ (𝑦𝑅𝑎𝑦𝑅𝑏))))))
65imp42 429 . . . . . . . . . 10 (((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) ∧ 𝑦𝑋) → (𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ (𝑦𝑅𝑎𝑦𝑅𝑏)))
76notbid 320 . . . . . . . . 9 (((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) ∧ 𝑦𝑋) → (¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ ¬ (𝑦𝑅𝑎𝑦𝑅𝑏)))
8 ioran 980 . . . . . . . . 9 (¬ (𝑦𝑅𝑎𝑦𝑅𝑏) ↔ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏))
97, 8syl6bb 289 . . . . . . . 8 (((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) ∧ 𝑦𝑋) → (¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎) ↔ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)))
109rabbidva 3480 . . . . . . 7 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} = {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)})
11 ifcl 4513 . . . . . . . . 9 ((𝑏𝑋𝑎𝑋) → if(𝑎𝑅𝑏, 𝑏, 𝑎) ∈ 𝑋)
1211ancoms 461 . . . . . . . 8 ((𝑎𝑋𝑏𝑋) → if(𝑎𝑅𝑏, 𝑏, 𝑎) ∈ 𝑋)
13 dmexg 7615 . . . . . . . . . . . 12 (𝑅 ∈ TosetRel → dom 𝑅 ∈ V)
142, 13eqeltrid 2919 . . . . . . . . . . 11 (𝑅 ∈ TosetRel → 𝑋 ∈ V)
1514adantr 483 . . . . . . . . . 10 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → 𝑋 ∈ V)
16 rabexg 5236 . . . . . . . . . 10 (𝑋 ∈ V → {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ V)
1715, 16syl 17 . . . . . . . . 9 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ V)
1810, 17eqeltrd 2915 . . . . . . . 8 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ V)
19 eqid 2823 . . . . . . . . . 10 (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}) = (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})
20 breq2 5072 . . . . . . . . . . . 12 (𝑥 = if(𝑎𝑅𝑏, 𝑏, 𝑎) → (𝑦𝑅𝑥𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)))
2120notbid 320 . . . . . . . . . . 11 (𝑥 = if(𝑎𝑅𝑏, 𝑏, 𝑎) → (¬ 𝑦𝑅𝑥 ↔ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)))
2221rabbidv 3482 . . . . . . . . . 10 (𝑥 = if(𝑎𝑅𝑏, 𝑏, 𝑎) → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} = {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)})
2319, 22elrnmpt1s 5831 . . . . . . . . 9 ((if(𝑎𝑅𝑏, 𝑏, 𝑎) ∈ 𝑋 ∧ {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ V) → {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}))
24 ordtval.2 . . . . . . . . 9 𝐴 = ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})
2523, 24eleqtrrdi 2926 . . . . . . . 8 ((if(𝑎𝑅𝑏, 𝑏, 𝑎) ∈ 𝑋 ∧ {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ V) → {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ 𝐴)
2612, 18, 25syl2an2 684 . . . . . . 7 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → {𝑦𝑋 ∣ ¬ 𝑦𝑅if(𝑎𝑅𝑏, 𝑏, 𝑎)} ∈ 𝐴)
2710, 26eqeltrrd 2916 . . . . . 6 ((𝑅 ∈ TosetRel ∧ (𝑎𝑋𝑏𝑋)) → {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴)
2827ralrimivva 3193 . . . . 5 (𝑅 ∈ TosetRel → ∀𝑎𝑋𝑏𝑋 {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴)
29 rabexg 5236 . . . . . . . 8 (𝑋 ∈ V → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∈ V)
3014, 29syl 17 . . . . . . 7 (𝑅 ∈ TosetRel → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∈ V)
3130ralrimivw 3185 . . . . . 6 (𝑅 ∈ TosetRel → ∀𝑎𝑋 {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∈ V)
32 breq2 5072 . . . . . . . . . 10 (𝑥 = 𝑎 → (𝑦𝑅𝑥𝑦𝑅𝑎))
3332notbid 320 . . . . . . . . 9 (𝑥 = 𝑎 → (¬ 𝑦𝑅𝑥 ↔ ¬ 𝑦𝑅𝑎))
3433rabbidv 3482 . . . . . . . 8 (𝑥 = 𝑎 → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎})
3534cbvmptv 5171 . . . . . . 7 (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}) = (𝑎𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎})
36 ineq1 4183 . . . . . . . . . 10 (𝑧 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} → (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) = ({𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}))
37 inrab 4277 . . . . . . . . . 10 ({𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) = {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)}
3836, 37syl6eq 2874 . . . . . . . . 9 (𝑧 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} → (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) = {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)})
3938eleq1d 2899 . . . . . . . 8 (𝑧 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} → ((𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴 ↔ {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴))
4039ralbidv 3199 . . . . . . 7 (𝑧 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} → (∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴 ↔ ∀𝑏𝑋 {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴))
4135, 40ralrnmptw 6862 . . . . . 6 (∀𝑎𝑋 {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑎} ∈ V → (∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴 ↔ ∀𝑎𝑋𝑏𝑋 {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴))
4231, 41syl 17 . . . . 5 (𝑅 ∈ TosetRel → (∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴 ↔ ∀𝑎𝑋𝑏𝑋 {𝑦𝑋 ∣ (¬ 𝑦𝑅𝑎 ∧ ¬ 𝑦𝑅𝑏)} ∈ 𝐴))
4328, 42mpbird 259 . . . 4 (𝑅 ∈ TosetRel → ∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴)
44 rabexg 5236 . . . . . . . 8 (𝑋 ∈ V → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} ∈ V)
4514, 44syl 17 . . . . . . 7 (𝑅 ∈ TosetRel → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} ∈ V)
4645ralrimivw 3185 . . . . . 6 (𝑅 ∈ TosetRel → ∀𝑏𝑋 {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} ∈ V)
47 breq2 5072 . . . . . . . . . 10 (𝑥 = 𝑏 → (𝑦𝑅𝑥𝑦𝑅𝑏))
4847notbid 320 . . . . . . . . 9 (𝑥 = 𝑏 → (¬ 𝑦𝑅𝑥 ↔ ¬ 𝑦𝑅𝑏))
4948rabbidv 3482 . . . . . . . 8 (𝑥 = 𝑏 → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏})
5049cbvmptv 5171 . . . . . . 7 (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}) = (𝑏𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏})
51 ineq2 4185 . . . . . . . 8 (𝑤 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} → (𝑧𝑤) = (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}))
5251eleq1d 2899 . . . . . . 7 (𝑤 = {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} → ((𝑧𝑤) ∈ 𝐴 ↔ (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴))
5350, 52ralrnmptw 6862 . . . . . 6 (∀𝑏𝑋 {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏} ∈ V → (∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴 ↔ ∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴))
5446, 53syl 17 . . . . 5 (𝑅 ∈ TosetRel → (∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴 ↔ ∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴))
5554ralbidv 3199 . . . 4 (𝑅 ∈ TosetRel → (∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴 ↔ ∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑏𝑋 (𝑧 ∩ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑏}) ∈ 𝐴))
5643, 55mpbird 259 . . 3 (𝑅 ∈ TosetRel → ∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴)
5724raleqi 3415 . . . 4 (∀𝑤𝐴 (𝑧𝑤) ∈ 𝐴 ↔ ∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴)
5824, 57raleqbii 3236 . . 3 (∀𝑧𝐴𝑤𝐴 (𝑧𝑤) ∈ 𝐴 ↔ ∀𝑧 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})∀𝑤 ∈ ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥})(𝑧𝑤) ∈ 𝐴)
5956, 58sylibr 236 . 2 (𝑅 ∈ TosetRel → ∀𝑧𝐴𝑤𝐴 (𝑧𝑤) ∈ 𝐴)
6014pwexd 5282 . . . 4 (𝑅 ∈ TosetRel → 𝒫 𝑋 ∈ V)
61 ssrab2 4058 . . . . . . . 8 {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ⊆ 𝑋
6214adantr 483 . . . . . . . . 9 ((𝑅 ∈ TosetRel ∧ 𝑥𝑋) → 𝑋 ∈ V)
63 elpw2g 5249 . . . . . . . . 9 (𝑋 ∈ V → ({𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ∈ 𝒫 𝑋 ↔ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ⊆ 𝑋))
6462, 63syl 17 . . . . . . . 8 ((𝑅 ∈ TosetRel ∧ 𝑥𝑋) → ({𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ∈ 𝒫 𝑋 ↔ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ⊆ 𝑋))
6561, 64mpbiri 260 . . . . . . 7 ((𝑅 ∈ TosetRel ∧ 𝑥𝑋) → {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥} ∈ 𝒫 𝑋)
6665fmpttd 6881 . . . . . 6 (𝑅 ∈ TosetRel → (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}):𝑋⟶𝒫 𝑋)
6766frnd 6523 . . . . 5 (𝑅 ∈ TosetRel → ran (𝑥𝑋 ↦ {𝑦𝑋 ∣ ¬ 𝑦𝑅𝑥}) ⊆ 𝒫 𝑋)
6824, 67eqsstrid 4017 . . . 4 (𝑅 ∈ TosetRel → 𝐴 ⊆ 𝒫 𝑋)
6960, 68ssexd 5230 . . 3 (𝑅 ∈ TosetRel → 𝐴 ∈ V)
70 inficl 8891 . . 3 (𝐴 ∈ V → (∀𝑧𝐴𝑤𝐴 (𝑧𝑤) ∈ 𝐴 ↔ (fi‘𝐴) = 𝐴))
7169, 70syl 17 . 2 (𝑅 ∈ TosetRel → (∀𝑧𝐴𝑤𝐴 (𝑧𝑤) ∈ 𝐴 ↔ (fi‘𝐴) = 𝐴))
7259, 71mpbid 234 1 (𝑅 ∈ TosetRel → (fi‘𝐴) = 𝐴)
Colors of variables: wff setvar class
Syntax hints:  ¬ wn 3  wi 4  wb 208  wa 398  wo 843  w3a 1083   = wceq 1537  wcel 2114  wral 3140  {crab 3144  Vcvv 3496  cin 3937  wss 3938  ifcif 4469  𝒫 cpw 4541   class class class wbr 5068  cmpt 5148  dom cdm 5557  ran crn 5558  cfv 6357  ficfi 8876   TosetRel ctsr 17811
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1796  ax-4 1810  ax-5 1911  ax-6 1970  ax-7 2015  ax-8 2116  ax-9 2124  ax-10 2145  ax-11 2161  ax-12 2177  ax-ext 2795  ax-sep 5205  ax-nul 5212  ax-pow 5268  ax-pr 5332  ax-un 7463
This theorem depends on definitions:  df-bi 209  df-an 399  df-or 844  df-3or 1084  df-3an 1085  df-tru 1540  df-ex 1781  df-nf 1785  df-sb 2070  df-mo 2622  df-eu 2654  df-clab 2802  df-cleq 2816  df-clel 2895  df-nfc 2965  df-ne 3019  df-ral 3145  df-rex 3146  df-reu 3147  df-rab 3149  df-v 3498  df-sbc 3775  df-csb 3886  df-dif 3941  df-un 3943  df-in 3945  df-ss 3954  df-pss 3956  df-nul 4294  df-if 4470  df-pw 4543  df-sn 4570  df-pr 4572  df-tp 4574  df-op 4576  df-uni 4841  df-int 4879  df-iun 4923  df-br 5069  df-opab 5131  df-mpt 5149  df-tr 5175  df-id 5462  df-eprel 5467  df-po 5476  df-so 5477  df-fr 5516  df-we 5518  df-xp 5563  df-rel 5564  df-cnv 5565  df-co 5566  df-dm 5567  df-rn 5568  df-res 5569  df-ima 5570  df-pred 6150  df-ord 6196  df-on 6197  df-lim 6198  df-suc 6199  df-iota 6316  df-fun 6359  df-fn 6360  df-f 6361  df-f1 6362  df-fo 6363  df-f1o 6364  df-fv 6365  df-ov 7161  df-oprab 7162  df-mpo 7163  df-om 7583  df-wrecs 7949  df-recs 8010  df-rdg 8048  df-1o 8104  df-oadd 8108  df-er 8291  df-en 8512  df-fin 8515  df-fi 8877  df-ps 17812  df-tsr 17813
This theorem is referenced by:  ordtbas2  21801
  Copyright terms: Public domain W3C validator