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

Theorem dchrvmasumlema 27827
Description: Lemma for dchrvmasum 27852 and dchrvmasumif 27830. Apply dchrisum 27819 for the function log(𝑦) / 𝑦, which is decreasing above e (or above 3, the nearest integer bound). (Contributed by Mario Carneiro, 5-May-2016.)
Hypotheses
Ref Expression
rpvmasum.z 𝑍 = (ℤ/nℤ‘𝑁)
rpvmasum.l 𝐿 = (ℤRHom‘𝑍)
rpvmasum.a (𝜑 → 𝑁 ∈ ℕ)
rpvmasum.g 𝐺 = (DChr‘𝑁)
rpvmasum.d 𝐷 = (Base‘𝐺)
rpvmasum.1 1 = (0g‘𝐺)
dchrisum.b (𝜑 → 𝑋 ∈ 𝐷)
dchrisum.n1 (𝜑 → 𝑋 ≠ 1 )
dchrvmasumlema.f 𝐹 = (𝑎 ∈ ℕ ↦ ((𝑋‘(𝐿‘𝑎)) · ((log‘𝑎) / 𝑎)))
Assertion
Ref Expression
dchrvmasumlema (𝜑 → ∃𝑡∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
Distinct variable groups:   𝑡,𝑐,𝑦, 1   𝐹,𝑐,𝑡,𝑦   𝑎,𝑐,𝑡,𝑦   𝑁,𝑐,𝑡,𝑦   𝜑,𝑐,𝑡   𝑦,𝑍   𝐷,𝑐,𝑡,𝑦   𝐿,𝑎,𝑐,𝑡,𝑦   𝑋,𝑎,𝑐,𝑡,𝑦
Allowed substitution hints:   𝜑(𝑦, 𝑎)   𝐷(𝑎)   1 (𝑎)   𝐹(𝑎)   𝐺(𝑦, 𝑡, 𝑎, 𝑐)   𝑁(𝑎)   𝑍(𝑡, 𝑎, 𝑐)

Proof of Theorem dchrvmasumlema
Dummy variables 𝑛 𝑥 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 rpvmasum.z . . 3 𝑍 = (ℤ/nℤ‘𝑁)
2 rpvmasum.l . . 3 𝐿 = (ℤRHom‘𝑍)
3 rpvmasum.a . . 3 (𝜑 → 𝑁 ∈ ℕ)
4 rpvmasum.g . . 3 𝐺 = (DChr‘𝑁)
5 rpvmasum.d . . 3 𝐷 = (Base‘𝐺)
6 rpvmasum.1 . . 3 1 = (0g‘𝐺)
7 dchrisum.b . . 3 (𝜑 → 𝑋 ∈ 𝐷)
8 dchrisum.n1 . . 3 (𝜑 → 𝑋 ≠ 1 )
9 fveq2 6885 . . . 4 (𝑛 = 𝑥 → (log‘𝑛) = (log‘𝑥))
10 id 23 . . . 4 (𝑛 = 𝑥 → 𝑛 = 𝑥)
119, 10oveq12d 7438 . . 3 (𝑛 = 𝑥 → ((log‘𝑛) / 𝑛) = ((log‘𝑥) / 𝑥))
12 3nn 12422 . . . 4 3 ∈ ℕ
1312a1i 11 . . 3 (𝜑 → 3 ∈ ℕ)
14 relogcl 26903 . . . . 5 (𝑛 ∈ ℝ+ → (log‘𝑛) ∈ ℝ)
15 rerpdivcl 13152 . . . . 5 (((log‘𝑛) ∈ ℝ ∧ 𝑛 ∈ ℝ+) → ((log‘𝑛) / 𝑛) ∈ ℝ)
1614, 15mpancom 701 . . . 4 (𝑛 ∈ ℝ+ → ((log‘𝑛) / 𝑛) ∈ ℝ)
1716adantl 487 . . 3 ((𝜑 ∧ 𝑛 ∈ ℝ+) → ((log‘𝑛) / 𝑛) ∈ ℝ)
18 simp3r 1221 . . . 4 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 𝑛 ≤ 𝑥)
19 simp2l 1218 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 𝑛 ∈ ℝ+)
2019rpred 13164 . . . . 5 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 𝑛 ∈ ℝ)
21 ere 16255 . . . . . . 7 e ∈ ℝ
2221a1i 11 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → e ∈ ℝ)
23 3re 12423 . . . . . . 7 3 ∈ ℝ
2423a1i 11 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 3 ∈ ℝ)
25 egt2lt3 16374 . . . . . . . . 9 (2 < e ∧ e < 3)
2625simpri 491 . . . . . . . 8 e < 3
2721, 23, 26ltleii 11433 . . . . . . 7 e ≤ 3
2827a1i 11 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → e ≤ 3)
29 simp3l 1220 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 3 ≤ 𝑛)
3022, 24, 20, 28, 29letrd 11467 . . . . 5 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → e ≤ 𝑛)
31 simp2r 1219 . . . . . 6 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 𝑥 ∈ ℝ+)
3231rpred 13164 . . . . 5 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → 𝑥 ∈ ℝ)
3322, 20, 32, 30, 18letrd 11467 . . . . 5 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → e ≤ 𝑥)
34 logdivle 26950 . . . . 5 (((𝑛 ∈ ℝ ∧ e ≤ 𝑛) ∧ (𝑥 ∈ ℝ ∧ e ≤ 𝑥)) → (𝑛 ≤ 𝑥 ↔ ((log‘𝑥) / 𝑥) ≤ ((log‘𝑛) / 𝑛)))
3520, 30, 32, 33, 34syl22anc 852 . . . 4 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → (𝑛 ≤ 𝑥 ↔ ((log‘𝑥) / 𝑥) ≤ ((log‘𝑛) / 𝑛)))
3618, 35mpbid 235 . . 3 ((𝜑 ∧ (𝑛 ∈ ℝ+ ∧ 𝑥 ∈ ℝ+) ∧ (3 ≤ 𝑛 ∧ 𝑛 ≤ 𝑥)) → ((log‘𝑥) / 𝑥) ≤ ((log‘𝑛) / 𝑛))
37 rpcn 13131 . . . . . . 7 (𝑛 ∈ ℝ+ → 𝑛 ∈ ℂ)
3837cxp1d 27034 . . . . . 6 (𝑛 ∈ ℝ+ → (𝑛↑𝑐1) = 𝑛)
3938oveq2d 7436 . . . . 5 (𝑛 ∈ ℝ+ → ((log‘𝑛) / (𝑛↑𝑐1)) = ((log‘𝑛) / 𝑛))
4039mpteq2ia 5199 . . . 4 (𝑛 ∈ ℝ+ ↦ ((log‘𝑛) / (𝑛↑𝑐1))) = (𝑛 ∈ ℝ+ ↦ ((log‘𝑛) / 𝑛))
41 1rp 13124 . . . . 5 1 ∈ ℝ+
42 cxploglim 27305 . . . . 5 (1 ∈ ℝ+ → (𝑛 ∈ ℝ+ ↦ ((log‘𝑛) / (𝑛↑𝑐1))) ⇝𝑟 0)
4341, 42mp1i 14 . . . 4 (𝜑 → (𝑛 ∈ ℝ+ ↦ ((log‘𝑛) / (𝑛↑𝑐1))) ⇝𝑟 0)
4440, 43eqbrtrrid 5140 . . 3 (𝜑 → (𝑛 ∈ ℝ+ ↦ ((log‘𝑛) / 𝑛)) ⇝𝑟 0)
45 dchrvmasumlema.f . . . 4 𝐹 = (𝑎 ∈ ℕ ↦ ((𝑋‘(𝐿‘𝑎)) · ((log‘𝑎) / 𝑎)))
46 2fveq3 6890 . . . . . 6 (𝑎 = 𝑛 → (𝑋‘(𝐿‘𝑎)) = (𝑋‘(𝐿‘𝑛)))
47 fveq2 6885 . . . . . . 7 (𝑎 = 𝑛 → (log‘𝑎) = (log‘𝑛))
48 id 23 . . . . . . 7 (𝑎 = 𝑛 → 𝑎 = 𝑛)
4947, 48oveq12d 7438 . . . . . 6 (𝑎 = 𝑛 → ((log‘𝑎) / 𝑎) = ((log‘𝑛) / 𝑛))
5046, 49oveq12d 7438 . . . . 5 (𝑎 = 𝑛 → ((𝑋‘(𝐿‘𝑎)) · ((log‘𝑎) / 𝑎)) = ((𝑋‘(𝐿‘𝑛)) · ((log‘𝑛) / 𝑛)))
5150cbvmptv 5208 . . . 4 (𝑎 ∈ ℕ ↦ ((𝑋‘(𝐿‘𝑎)) · ((log‘𝑎) / 𝑎))) = (𝑛 ∈ ℕ ↦ ((𝑋‘(𝐿‘𝑛)) · ((log‘𝑛) / 𝑛)))
5245, 51eqtri 2783 . . 3 𝐹 = (𝑛 ∈ ℕ ↦ ((𝑋‘(𝐿‘𝑛)) · ((log‘𝑛) / 𝑛)))
531, 2, 3, 4, 5, 6, 7, 8, 11, 13, 17, 36, 44, 52dchrisum 27819 . 2 (𝜑 → ∃𝑡∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑥 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥))))
54 2fveq3 6890 . . . . . . . 8 (𝑥 = 𝑦 → (seq1( + , 𝐹)‘(⌊‘𝑥)) = (seq1( + , 𝐹)‘(⌊‘𝑦)))
5554fvoveq1d 7442 . . . . . . 7 (𝑥 = 𝑦 → (abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) = (abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)))
56 fveq2 6885 . . . . . . . . 9 (𝑥 = 𝑦 → (log‘𝑥) = (log‘𝑦))
57 id 23 . . . . . . . . 9 (𝑥 = 𝑦 → 𝑥 = 𝑦)
5856, 57oveq12d 7438 . . . . . . . 8 (𝑥 = 𝑦 → ((log‘𝑥) / 𝑥) = ((log‘𝑦) / 𝑦))
5958oveq2d 7436 . . . . . . 7 (𝑥 = 𝑦 → (𝑐 · ((log‘𝑥) / 𝑥)) = (𝑐 · ((log‘𝑦) / 𝑦)))
6055, 59breq12d 5115 . . . . . 6 (𝑥 = 𝑦 → ((abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥)) ↔ (abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
6160cbvralvw 3240 . . . . 5 (∀𝑥 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥)) ↔ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦)))
6261anbi2i 635 . . . 4 ((seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑥 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥))) ↔ (seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
6362rexbii 3109 . . 3 (∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑥 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥))) ↔ ∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
6463exbii 1880 . 2 (∃𝑡∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑥 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑥)) − 𝑡)) ≤ (𝑐 · ((log‘𝑥) / 𝑥))) ↔ ∃𝑡∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
6553, 64sylib 221 1 (𝜑 → ∃𝑡∃𝑐 ∈ (0[,)+∞)(seq1( + , 𝐹) ⇝ 𝑡 ∧ ∀𝑦 ∈ (3[,)+∞)(abs‘((seq1( + , 𝐹)‘(⌊‘𝑦)) − 𝑡)) ≤ (𝑐 · ((log‘𝑦) / 𝑦))))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ↔ wb 209   ∧ wa 401   ∧ w3a 1103   = wceq 1569  ∃wex 1811   ∈ wcel 2144   ≠ wne 2955  ∀wral 3076  ∃wrex 3086   class class class wbr 5102   ↦ cmpt 5185  ‘cfv 6538  (class class class)co 7420  ℝcr 11199  0cc0 11200  1c1 11201   + caddc 11203   · cmul 11205  +∞cpnf 11340   < clt 11343   ≤ cle 11344   − cmin 11541   / cdiv 11973  ℕcn 12335  2c2 12397  3c3 12398  ℝ+crp 13120  [,)cico 13478  ⌊cfl 13930  seqcseq 14144  abscabs 15401   ⇝ cli 15651   ⇝𝑟 crli 15652  eceu 16228  Basecbs 17387  0gc0g 17610  ℤRHomczrh 21805  ℤ/nℤczn 21808  logclog 26882  ↑𝑐ccxp 26883  DChrcdchr 27559
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1827  ax-4 1841  ax-5 1942  ax-6 1999  ax-7 2040  ax-8 2146  ax-9 2154  ax-10 2177  ax-11 2193  ax-12 2212  ax-ext 2732  ax-rep 5231  ax-sep 5248  ax-nul 5259  ax-pow 5326  ax-pr 5390  ax-un 7751  ax-inf2 9642  ax-cnex 11256  ax-resscn 11257  ax-1cn 11258  ax-icn 11259  ax-addcl 11260  ax-addrcl 11261  ax-mulcl 11262  ax-mulrcl 11263  ax-mulcom 11264  ax-addass 11265  ax-mulass 11266  ax-distr 11267  ax-i2m1 11268  ax-1ne0 11269  ax-1rid 11270  ax-rnegex 11271  ax-rrecex 11272  ax-cnre 11273  ax-pre-lttri 11274  ax-pre-lttrn 11275  ax-pre-ltadd 11276  ax-pre-mulgt0 11277  ax-pre-sup 11278  ax-addf 11279  ax-mulf 11280
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1572  df-fal 1582  df-ex 1812  df-nf 1816  df-sb 2099  df-mo 2564  df-eu 2594  df-clab 2739  df-cleq 2752  df-clel 2835  df-nfc 2909  df-ne 2956  df-nel 3062  df-ral 3077  df-rex 3087  df-rmo 3365  df-reu 3366  df-rab 3413  df-v 3452  df-sbc 3739  df-csb 3847  df-ss 3896  df-pss 4014  df-dif 4047  df-in 4091  df-un 4151  df-nul 4279  df-if 4482  df-pw 4558  df-sn 4584  df-pr 4586  df-tp 4588  df-op 4590  df-uni 4867  df-int 4907  df-iun 4952  df-iin 4953  df-br 5103  df-opab 5167  df-mpt 5186  df-tr 5212  df-id 5545  df-eprel 5550  df-po 5558  df-so 5559  df-fr 5603  df-se 5604  df-we 5605  df-xp 5656  df-rel 5657  df-cnv 5658  df-co 5659  df-dm 5660  df-rn 5661  df-res 5662  df-ima 5663  df-pred 6304  df-ord 6365  df-on 6366  df-lim 6367  df-suc 6368  df-iota 6494  df-fun 6540  df-fn 6541  df-f 6542  df-f1 6543  df-fo 6544  df-f1o 6545  df-fv 6546  df-isom 6547  df-riota 7377  df-ov 7423  df-oprab 7424  df-mpo 7425  df-of 7693  df-om 7878  df-1st 8001  df-2nd 8002  df-supp 8178  df-tpos 8243  df-frecs 8299  df-wrecs 8330  df-recs 8379  df-rdg 8418  df-1o 8476  df-2o 8477  df-oadd 8480  df-er 8717  df-ec 8719  df-qs 8723  df-map 8849  df-pm 8850  df-ixp 8926  df-en 8974  df-dom 8975  df-sdom 8976  df-fin 8977  df-fsupp 9354  df-fi 9403  df-sup 9434  df-inf 9435  df-oi 9504  df-card 10020  df-pnf 11345  df-mnf 11346  df-xr 11347  df-ltxr 11348  df-le 11349  df-sub 11543  df-neg 11544  df-div 11974  df-nn 12336  df-2 12405  df-3 12406  df-4 12407  df-5 12408  df-6 12409  df-7 12410  df-8 12411  df-9 12412  df-n0 12607  df-xnn0 12680  df-z 12694  df-dec 12815  df-uz 12966  df-q 13076  df-rp 13121  df-xneg 13241  df-xadd 13242  df-xmul 13243  df-ioo 13480  df-ioc 13481  df-ico 13482  df-icc 13483  df-fz 13640  df-fzo 13789  df-fl 13932  df-mod 14010  df-seq 14145  df-exp 14205  df-fac 14418  df-bc 14447  df-hash 14475  df-shft 15220  df-cj 15266  df-re 15267  df-im 15268  df-sqrt 15402  df-abs 15403  df-limsup 15638  df-clim 15655  df-rlim 15656  df-sum 15854  df-ef 16233  df-e 16234  df-sin 16235  df-cos 16236  df-pi 16238  df-dvds 16423  df-gcd 16665  df-phi 16943  df-struct 17325  df-sets 17342  df-slot 17360  df-ndx 17372  df-base 17388  df-ress 17409  df-plusg 17441  df-mulr 17442  df-starv 17443  df-sca 17444  df-vsca 17445  df-ip 17446  df-tset 17447  df-ple 17448  df-ds 17450  df-unif 17451  df-hom 17452  df-cco 17453  df-rest 17593  df-topn 17594  df-0g 17612  df-gsum 17613  df-topgen 17614  df-pt 17615  df-prds 17618  df-xrs 17674  df-qtop 17679  df-imas 17680  df-qus 17681  df-xps 17682  df-mre 17756  df-mrc 17757  df-acs 17759  df-mgm 18816  df-sgrp 18908  df-mnd 18924  df-mhm 18978  df-submnd 18979  df-grp 19147  df-minusg 19148  df-sbg 19149  df-mulg 19278  df-subg 19333  df-nsg 19334  df-eqg 19335  df-ghm 19428  df-cntz 19531  df-cmn 19996  df-abl 19997  df-mgp 20361  df-rng 20375  df-ur 20408  df-ring 20461  df-cring 20462  df-oppr 20567  df-dvdsr 20587  df-unit 20588  df-invr 20618  df-rhm 20702  df-subrng 20798  df-subrg 20822  df-lmod 21137  df-lss 21207  df-lsp 21247  df-sra 21448  df-rgmod 21449  df-lidl 21486  df-rsp 21487  df-2idl 21543  df-psmet 21670  df-xmet 21671  df-met 21672  df-bl 21673  df-mopn 21674  df-fbas 21675  df-fg 21676  df-cnfld 21679  df-zring 21753  df-zrh 21809  df-zn 21812  df-top 23212  df-topon 23229  df-topsp 23251  df-bases 23264  df-cld 23337  df-ntr 23338  df-cls 23339  df-nei 23416  df-lp 23454  df-perf 23455  df-cn 23545  df-cnp 23546  df-haus 23633  df-tx 23881  df-hmeo 24074  df-fil 24165  df-fm 24257  df-flim 24258  df-flf 24259  df-xms 24639  df-ms 24640  df-tms 24641  df-cncf 25199  df-limc 26186  df-dv 26187  df-log 26884  df-cxp 26885  df-dchr 27560
This theorem is used by:  dchrvmasumif  27830
  Copyright terms: Public domain W3C validator