Users' Mathboxes Mathbox for Stefan O'Rear < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  hbtlem4 Structured version   Visualization version   GIF version

Theorem hbtlem4 42451
Description: The leading ideal function goes to increasing sequences. (Contributed by Stefan O'Rear, 1-Apr-2015.)
Hypotheses
Ref Expression
hbtlem.p 𝑃 = (Poly1𝑅)
hbtlem.u 𝑈 = (LIdeal‘𝑃)
hbtlem.s 𝑆 = (ldgIdlSeq‘𝑅)
hbtlem4.r (𝜑𝑅 ∈ Ring)
hbtlem4.i (𝜑𝐼𝑈)
hbtlem4.x (𝜑𝑋 ∈ ℕ0)
hbtlem4.y (𝜑𝑌 ∈ ℕ0)
hbtlem4.xy (𝜑𝑋𝑌)
Assertion
Ref Expression
hbtlem4 (𝜑 → ((𝑆𝐼)‘𝑋) ⊆ ((𝑆𝐼)‘𝑌))

Proof of Theorem hbtlem4
Dummy variables 𝑎 𝑐 𝑏 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 hbtlem4.r . . . . . . . . . 10 (𝜑𝑅 ∈ Ring)
21ad2antrr 723 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑅 ∈ Ring)
3 hbtlem.p . . . . . . . . . 10 𝑃 = (Poly1𝑅)
43ply1ring 22121 . . . . . . . . 9 (𝑅 ∈ Ring → 𝑃 ∈ Ring)
52, 4syl 17 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑃 ∈ Ring)
6 hbtlem4.i . . . . . . . . 9 (𝜑𝐼𝑈)
76ad2antrr 723 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝐼𝑈)
8 eqid 2726 . . . . . . . . . 10 (mulGrp‘𝑃) = (mulGrp‘𝑃)
9 eqid 2726 . . . . . . . . . 10 (Base‘𝑃) = (Base‘𝑃)
108, 9mgpbas 20045 . . . . . . . . 9 (Base‘𝑃) = (Base‘(mulGrp‘𝑃))
11 eqid 2726 . . . . . . . . 9 (.g‘(mulGrp‘𝑃)) = (.g‘(mulGrp‘𝑃))
128ringmgp 20144 . . . . . . . . . 10 (𝑃 ∈ Ring → (mulGrp‘𝑃) ∈ Mnd)
135, 12syl 17 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (mulGrp‘𝑃) ∈ Mnd)
14 hbtlem4.x . . . . . . . . . . 11 (𝜑𝑋 ∈ ℕ0)
1514ad2antrr 723 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋 ∈ ℕ0)
16 hbtlem4.y . . . . . . . . . . 11 (𝜑𝑌 ∈ ℕ0)
1716ad2antrr 723 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑌 ∈ ℕ0)
18 hbtlem4.xy . . . . . . . . . . 11 (𝜑𝑋𝑌)
1918ad2antrr 723 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋𝑌)
20 nn0sub2 12627 . . . . . . . . . 10 ((𝑋 ∈ ℕ0𝑌 ∈ ℕ0𝑋𝑌) → (𝑌𝑋) ∈ ℕ0)
2115, 17, 19, 20syl3anc 1368 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (𝑌𝑋) ∈ ℕ0)
22 eqid 2726 . . . . . . . . . . 11 (var1𝑅) = (var1𝑅)
2322, 3, 9vr1cl 22091 . . . . . . . . . 10 (𝑅 ∈ Ring → (var1𝑅) ∈ (Base‘𝑃))
242, 23syl 17 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (var1𝑅) ∈ (Base‘𝑃))
2510, 11, 13, 21, 24mulgnn0cld 19022 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅)) ∈ (Base‘𝑃))
26 simplr 766 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑐𝐼)
27 hbtlem.u . . . . . . . . 9 𝑈 = (LIdeal‘𝑃)
28 eqid 2726 . . . . . . . . 9 (.r𝑃) = (.r𝑃)
2927, 9, 28lidlmcl 21084 . . . . . . . 8 (((𝑃 ∈ Ring ∧ 𝐼𝑈) ∧ (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅)) ∈ (Base‘𝑃) ∧ 𝑐𝐼)) → (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼)
305, 7, 25, 26, 29syl22anc 836 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼)
31 eqid 2726 . . . . . . . . 9 ( deg1𝑅) = ( deg1𝑅)
329, 27lidlss 21071 . . . . . . . . . . 11 (𝐼𝑈𝐼 ⊆ (Base‘𝑃))
337, 32syl 17 . . . . . . . . . 10 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝐼 ⊆ (Base‘𝑃))
3433, 26sseldd 3978 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑐 ∈ (Base‘𝑃))
3531, 3, 22, 8, 11deg1pwle 26010 . . . . . . . . . 10 ((𝑅 ∈ Ring ∧ (𝑌𝑋) ∈ ℕ0) → (( deg1𝑅)‘((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))) ≤ (𝑌𝑋))
362, 21, 35syl2anc 583 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))) ≤ (𝑌𝑋))
37 simpr 484 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘𝑐) ≤ 𝑋)
383, 31, 2, 9, 28, 25, 34, 21, 15, 36, 37deg1mulle2 26000 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ ((𝑌𝑋) + 𝑋))
3917nn0cnd 12538 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑌 ∈ ℂ)
4015nn0cnd 12538 . . . . . . . . 9 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → 𝑋 ∈ ℂ)
4139, 40npcand 11579 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((𝑌𝑋) + 𝑋) = 𝑌)
4238, 41breqtrd 5167 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌)
43 eqid 2726 . . . . . . . . 9 (0g𝑅) = (0g𝑅)
4443, 3, 22, 8, 11, 9, 28, 2, 34, 21, 15coe1pwmulfv 22154 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘((𝑌𝑋) + 𝑋)) = ((coe1𝑐)‘𝑋))
4541fveq2d 6889 . . . . . . . 8 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘((𝑌𝑋) + 𝑋)) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
4644, 45eqtr3d 2768 . . . . . . 7 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
47 fveq2 6885 . . . . . . . . . 10 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (( deg1𝑅)‘𝑏) = (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)))
4847breq1d 5151 . . . . . . . . 9 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → ((( deg1𝑅)‘𝑏) ≤ 𝑌 ↔ (( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌))
49 fveq2 6885 . . . . . . . . . . 11 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (coe1𝑏) = (coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)))
5049fveq1d 6887 . . . . . . . . . 10 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → ((coe1𝑏)‘𝑌) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))
5150eqeq2d 2737 . . . . . . . . 9 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌) ↔ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌)))
5248, 51anbi12d 630 . . . . . . . 8 (𝑏 = (((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) → (((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)) ↔ ((( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))))
5352rspcev 3606 . . . . . . 7 (((((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐) ∈ 𝐼 ∧ ((( deg1𝑅)‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐)) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1‘(((𝑌𝑋)(.g‘(mulGrp‘𝑃))(var1𝑅))(.r𝑃)𝑐))‘𝑌))) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
5430, 42, 46, 53syl12anc 834 . . . . . 6 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
55 eqeq1 2730 . . . . . . . 8 (𝑎 = ((coe1𝑐)‘𝑋) → (𝑎 = ((coe1𝑏)‘𝑌) ↔ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌)))
5655anbi2d 628 . . . . . . 7 (𝑎 = ((coe1𝑐)‘𝑋) → (((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌)) ↔ ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌))))
5756rexbidv 3172 . . . . . 6 (𝑎 = ((coe1𝑐)‘𝑋) → (∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌)) ↔ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌 ∧ ((coe1𝑐)‘𝑋) = ((coe1𝑏)‘𝑌))))
5854, 57syl5ibrcom 246 . . . . 5 (((𝜑𝑐𝐼) ∧ (( deg1𝑅)‘𝑐) ≤ 𝑋) → (𝑎 = ((coe1𝑐)‘𝑋) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
5958expimpd 453 . . . 4 ((𝜑𝑐𝐼) → (((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋)) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
6059rexlimdva 3149 . . 3 (𝜑 → (∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋)) → ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))))
6160ss2abdv 4055 . 2 (𝜑 → {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))} ⊆ {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
62 hbtlem.s . . . 4 𝑆 = (ldgIdlSeq‘𝑅)
633, 27, 62, 31hbtlem1 42448 . . 3 ((𝑅 ∈ Ring ∧ 𝐼𝑈𝑋 ∈ ℕ0) → ((𝑆𝐼)‘𝑋) = {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))})
641, 6, 14, 63syl3anc 1368 . 2 (𝜑 → ((𝑆𝐼)‘𝑋) = {𝑎 ∣ ∃𝑐𝐼 ((( deg1𝑅)‘𝑐) ≤ 𝑋𝑎 = ((coe1𝑐)‘𝑋))})
653, 27, 62, 31hbtlem1 42448 . . 3 ((𝑅 ∈ Ring ∧ 𝐼𝑈𝑌 ∈ ℕ0) → ((𝑆𝐼)‘𝑌) = {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
661, 6, 16, 65syl3anc 1368 . 2 (𝜑 → ((𝑆𝐼)‘𝑌) = {𝑎 ∣ ∃𝑏𝐼 ((( deg1𝑅)‘𝑏) ≤ 𝑌𝑎 = ((coe1𝑏)‘𝑌))})
6761, 64, 663sstr4d 4024 1 (𝜑 → ((𝑆𝐼)‘𝑋) ⊆ ((𝑆𝐼)‘𝑌))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wa 395   = wceq 1533  wcel 2098  {cab 2703  wrex 3064  wss 3943   class class class wbr 5141  cfv 6537  (class class class)co 7405   + caddc 11115  cle 11253  cmin 11448  0cn0 12476  Basecbs 17153  .rcmulr 17207  0gc0g 17394  Mndcmnd 18667  .gcmg 18995  mulGrpcmgp 20039  Ringcrg 20138  LIdealclidl 21065  var1cv1 22050  Poly1cpl1 22051  coe1cco1 22052   deg1 cdg1 25942  ldgIdlSeqcldgis 42446
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1789  ax-4 1803  ax-5 1905  ax-6 1963  ax-7 2003  ax-8 2100  ax-9 2108  ax-10 2129  ax-11 2146  ax-12 2163  ax-ext 2697  ax-rep 5278  ax-sep 5292  ax-nul 5299  ax-pow 5356  ax-pr 5420  ax-un 7722  ax-cnex 11168  ax-resscn 11169  ax-1cn 11170  ax-icn 11171  ax-addcl 11172  ax-addrcl 11173  ax-mulcl 11174  ax-mulrcl 11175  ax-mulcom 11176  ax-addass 11177  ax-mulass 11178  ax-distr 11179  ax-i2m1 11180  ax-1ne0 11181  ax-1rid 11182  ax-rnegex 11183  ax-rrecex 11184  ax-cnre 11185  ax-pre-lttri 11186  ax-pre-lttrn 11187  ax-pre-ltadd 11188  ax-pre-mulgt0 11189  ax-pre-sup 11190  ax-addf 11191
This theorem depends on definitions:  df-bi 206  df-an 396  df-or 845  df-3or 1085  df-3an 1086  df-tru 1536  df-fal 1546  df-ex 1774  df-nf 1778  df-sb 2060  df-mo 2528  df-eu 2557  df-clab 2704  df-cleq 2718  df-clel 2804  df-nfc 2879  df-ne 2935  df-nel 3041  df-ral 3056  df-rex 3065  df-rmo 3370  df-reu 3371  df-rab 3427  df-v 3470  df-sbc 3773  df-csb 3889  df-dif 3946  df-un 3948  df-in 3950  df-ss 3960  df-pss 3962  df-nul 4318  df-if 4524  df-pw 4599  df-sn 4624  df-pr 4626  df-tp 4628  df-op 4630  df-uni 4903  df-int 4944  df-iun 4992  df-iin 4993  df-br 5142  df-opab 5204  df-mpt 5225  df-tr 5259  df-id 5567  df-eprel 5573  df-po 5581  df-so 5582  df-fr 5624  df-se 5625  df-we 5626  df-xp 5675  df-rel 5676  df-cnv 5677  df-co 5678  df-dm 5679  df-rn 5680  df-res 5681  df-ima 5682  df-pred 6294  df-ord 6361  df-on 6362  df-lim 6363  df-suc 6364  df-iota 6489  df-fun 6539  df-fn 6540  df-f 6541  df-f1 6542  df-fo 6543  df-f1o 6544  df-fv 6545  df-isom 6546  df-riota 7361  df-ov 7408  df-oprab 7409  df-mpo 7410  df-of 7667  df-ofr 7668  df-om 7853  df-1st 7974  df-2nd 7975  df-supp 8147  df-frecs 8267  df-wrecs 8298  df-recs 8372  df-rdg 8411  df-1o 8467  df-er 8705  df-map 8824  df-pm 8825  df-ixp 8894  df-en 8942  df-dom 8943  df-sdom 8944  df-fin 8945  df-fsupp 9364  df-sup 9439  df-oi 9507  df-card 9936  df-pnf 11254  df-mnf 11255  df-xr 11256  df-ltxr 11257  df-le 11258  df-sub 11450  df-neg 11451  df-nn 12217  df-2 12279  df-3 12280  df-4 12281  df-5 12282  df-6 12283  df-7 12284  df-8 12285  df-9 12286  df-n0 12477  df-z 12563  df-dec 12682  df-uz 12827  df-fz 13491  df-fzo 13634  df-seq 13973  df-hash 14296  df-struct 17089  df-sets 17106  df-slot 17124  df-ndx 17136  df-base 17154  df-ress 17183  df-plusg 17219  df-mulr 17220  df-starv 17221  df-sca 17222  df-vsca 17223  df-ip 17224  df-tset 17225  df-ple 17226  df-ds 17228  df-unif 17229  df-hom 17230  df-cco 17231  df-0g 17396  df-gsum 17397  df-prds 17402  df-pws 17404  df-mre 17539  df-mrc 17540  df-acs 17542  df-mgm 18573  df-sgrp 18652  df-mnd 18668  df-mhm 18713  df-submnd 18714  df-grp 18866  df-minusg 18867  df-sbg 18868  df-mulg 18996  df-subg 19050  df-ghm 19139  df-cntz 19233  df-cmn 19702  df-abl 19703  df-mgp 20040  df-rng 20058  df-ur 20087  df-ring 20140  df-cring 20141  df-subrng 20446  df-subrg 20471  df-lmod 20708  df-lss 20779  df-sra 21021  df-rgmod 21022  df-lidl 21067  df-cnfld 21241  df-psr 21803  df-mvr 21804  df-mpl 21805  df-opsr 21807  df-psr1 22054  df-vr1 22055  df-ply1 22056  df-coe1 22057  df-mdeg 25943  df-deg1 25944  df-ldgis 42447
This theorem is referenced by:  hbt  42455
  Copyright terms: Public domain W3C validator