Mathbox for Thierry Arnoux < Previous   Next > Nearby theorems Mirrors  >  Home  >  MPE Home  >  Th. List  >   Mathboxes  >  cnre2csqima Structured version   Visualization version   GIF version

Theorem cnre2csqima 29781
 Description: Image of a centered square by the canonical bijection from (ℝ × ℝ) to ℂ. (Contributed by Thierry Arnoux, 27-Sep-2017.)
Hypothesis
Ref Expression
cnre2csqima.1 𝐹 = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (𝑥 + (i · 𝑦)))
Assertion
Ref Expression
cnre2csqima ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → (𝑌 ∈ ((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) × (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) → ((abs‘(ℜ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷 ∧ (abs‘(ℑ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷)))
Distinct variable group:   𝑥,𝑦
Allowed substitution hints:   𝐷(𝑥,𝑦)   𝐹(𝑥,𝑦)   𝑋(𝑥,𝑦)   𝑌(𝑥,𝑦)

Proof of Theorem cnre2csqima
Dummy variables 𝑧 𝑢 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 ioossre 12193 . . 3 (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) ⊆ ℝ
2 ioossre 12193 . . 3 (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)) ⊆ ℝ
3 xpinpreima2 29777 . . . 4 (((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) ⊆ ℝ ∧ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)) ⊆ ℝ) → ((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) × (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) = (((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∩ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))))
43eleq2d 2684 . . 3 (((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) ⊆ ℝ ∧ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)) ⊆ ℝ) → (𝑌 ∈ ((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) × (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) ↔ 𝑌 ∈ (((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∩ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))))))
51, 2, 4mp2an 707 . 2 (𝑌 ∈ ((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) × (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) ↔ 𝑌 ∈ (((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∩ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))))
6 elin 3780 . . 3 (𝑌 ∈ (((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∩ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))) ↔ (𝑌 ∈ ((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∧ 𝑌 ∈ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))))
7 simpl 473 . . . . . . . . . . 11 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → 𝑥 ∈ ℝ)
87recnd 10028 . . . . . . . . . 10 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → 𝑥 ∈ ℂ)
9 ax-icn 9955 . . . . . . . . . . . 12 i ∈ ℂ
109a1i 11 . . . . . . . . . . 11 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → i ∈ ℂ)
11 simpr 477 . . . . . . . . . . . 12 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → 𝑦 ∈ ℝ)
1211recnd 10028 . . . . . . . . . . 11 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → 𝑦 ∈ ℂ)
1310, 12mulcld 10020 . . . . . . . . . 10 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (i · 𝑦) ∈ ℂ)
148, 13addcld 10019 . . . . . . . . 9 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (𝑥 + (i · 𝑦)) ∈ ℂ)
15 reval 13796 . . . . . . . . 9 ((𝑥 + (i · 𝑦)) ∈ ℂ → (ℜ‘(𝑥 + (i · 𝑦))) = (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2))
1614, 15syl 17 . . . . . . . 8 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (ℜ‘(𝑥 + (i · 𝑦))) = (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2))
17 crre 13804 . . . . . . . 8 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (ℜ‘(𝑥 + (i · 𝑦))) = 𝑥)
1816, 17eqtr3d 2657 . . . . . . 7 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2) = 𝑥)
1918mpt2eq3ia 6685 . . . . . 6 (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2)) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ 𝑥)
2014adantl 482 . . . . . . . 8 ((⊤ ∧ (𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ)) → (𝑥 + (i · 𝑦)) ∈ ℂ)
21 cnre2csqima.1 . . . . . . . . 9 𝐹 = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (𝑥 + (i · 𝑦)))
2221a1i 11 . . . . . . . 8 (⊤ → 𝐹 = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (𝑥 + (i · 𝑦))))
23 df-re 13790 . . . . . . . . 9 ℜ = (𝑧 ∈ ℂ ↦ ((𝑧 + (∗‘𝑧)) / 2))
2423a1i 11 . . . . . . . 8 (⊤ → ℜ = (𝑧 ∈ ℂ ↦ ((𝑧 + (∗‘𝑧)) / 2)))
25 id 22 . . . . . . . . . 10 (𝑧 = (𝑥 + (i · 𝑦)) → 𝑧 = (𝑥 + (i · 𝑦)))
26 fveq2 6158 . . . . . . . . . 10 (𝑧 = (𝑥 + (i · 𝑦)) → (∗‘𝑧) = (∗‘(𝑥 + (i · 𝑦))))
2725, 26oveq12d 6633 . . . . . . . . 9 (𝑧 = (𝑥 + (i · 𝑦)) → (𝑧 + (∗‘𝑧)) = ((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))))
2827oveq1d 6630 . . . . . . . 8 (𝑧 = (𝑥 + (i · 𝑦)) → ((𝑧 + (∗‘𝑧)) / 2) = (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2))
2920, 22, 24, 28fmpt2co 7220 . . . . . . 7 (⊤ → (ℜ ∘ 𝐹) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2)))
3029trud 1490 . . . . . 6 (ℜ ∘ 𝐹) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (((𝑥 + (i · 𝑦)) + (∗‘(𝑥 + (i · 𝑦)))) / 2))
31 df1stres 29365 . . . . . 6 (1st ↾ (ℝ × ℝ)) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ 𝑥)
3219, 30, 313eqtr4ri 2654 . . . . 5 (1st ↾ (ℝ × ℝ)) = (ℜ ∘ 𝐹)
3314rgen2a 2973 . . . . . 6 𝑥 ∈ ℝ ∀𝑦 ∈ ℝ (𝑥 + (i · 𝑦)) ∈ ℂ
3421fnmpt2 7198 . . . . . 6 (∀𝑥 ∈ ℝ ∀𝑦 ∈ ℝ (𝑥 + (i · 𝑦)) ∈ ℂ → 𝐹 Fn (ℝ × ℝ))
3533, 34ax-mp 5 . . . . 5 𝐹 Fn (ℝ × ℝ)
36 fo1st 7148 . . . . . 6 1st :V–onto→V
37 fofn 6084 . . . . . 6 (1st :V–onto→V → 1st Fn V)
3836, 37ax-mp 5 . . . . 5 1st Fn V
39 xp1st 7158 . . . . 5 (𝑧 ∈ (ℝ × ℝ) → (1st𝑧) ∈ ℝ)
4021rnmpt2 6735 . . . . . . . 8 ran 𝐹 = {𝑧 ∣ ∃𝑥 ∈ ℝ ∃𝑦 ∈ ℝ 𝑧 = (𝑥 + (i · 𝑦))}
41 simpr 477 . . . . . . . . . . . 12 (((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) ∧ 𝑧 = (𝑥 + (i · 𝑦))) → 𝑧 = (𝑥 + (i · 𝑦)))
4214adantr 481 . . . . . . . . . . . 12 (((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) ∧ 𝑧 = (𝑥 + (i · 𝑦))) → (𝑥 + (i · 𝑦)) ∈ ℂ)
4341, 42eqeltrd 2698 . . . . . . . . . . 11 (((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) ∧ 𝑧 = (𝑥 + (i · 𝑦))) → 𝑧 ∈ ℂ)
4443ex 450 . . . . . . . . . 10 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (𝑧 = (𝑥 + (i · 𝑦)) → 𝑧 ∈ ℂ))
4544rexlimivv 3031 . . . . . . . . 9 (∃𝑥 ∈ ℝ ∃𝑦 ∈ ℝ 𝑧 = (𝑥 + (i · 𝑦)) → 𝑧 ∈ ℂ)
4645abssi 3662 . . . . . . . 8 {𝑧 ∣ ∃𝑥 ∈ ℝ ∃𝑦 ∈ ℝ 𝑧 = (𝑥 + (i · 𝑦))} ⊆ ℂ
4740, 46eqsstri 3620 . . . . . . 7 ran 𝐹 ⊆ ℂ
48 simpl 473 . . . . . . 7 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → 𝑧 ∈ ran 𝐹)
4947, 48sseldi 3586 . . . . . 6 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → 𝑧 ∈ ℂ)
50 simpr 477 . . . . . . 7 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → 𝑢 ∈ ran 𝐹)
5147, 50sseldi 3586 . . . . . 6 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → 𝑢 ∈ ℂ)
5249, 51resubd 13906 . . . . 5 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → (ℜ‘(𝑧𝑢)) = ((ℜ‘𝑧) − (ℜ‘𝑢)))
5332, 35, 38, 39, 52cnre2csqlem 29780 . . . 4 ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → (𝑌 ∈ ((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) → (abs‘(ℜ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷))
54 imval 13797 . . . . . . . . 9 ((𝑥 + (i · 𝑦)) ∈ ℂ → (ℑ‘(𝑥 + (i · 𝑦))) = (ℜ‘((𝑥 + (i · 𝑦)) / i)))
5514, 54syl 17 . . . . . . . 8 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (ℑ‘(𝑥 + (i · 𝑦))) = (ℜ‘((𝑥 + (i · 𝑦)) / i)))
56 crim 13805 . . . . . . . 8 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (ℑ‘(𝑥 + (i · 𝑦))) = 𝑦)
5755, 56eqtr3d 2657 . . . . . . 7 ((𝑥 ∈ ℝ ∧ 𝑦 ∈ ℝ) → (ℜ‘((𝑥 + (i · 𝑦)) / i)) = 𝑦)
5857mpt2eq3ia 6685 . . . . . 6 (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (ℜ‘((𝑥 + (i · 𝑦)) / i))) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ 𝑦)
59 df-im 13791 . . . . . . . . 9 ℑ = (𝑧 ∈ ℂ ↦ (ℜ‘(𝑧 / i)))
6059a1i 11 . . . . . . . 8 (⊤ → ℑ = (𝑧 ∈ ℂ ↦ (ℜ‘(𝑧 / i))))
61 oveq1 6622 . . . . . . . . 9 (𝑧 = (𝑥 + (i · 𝑦)) → (𝑧 / i) = ((𝑥 + (i · 𝑦)) / i))
6261fveq2d 6162 . . . . . . . 8 (𝑧 = (𝑥 + (i · 𝑦)) → (ℜ‘(𝑧 / i)) = (ℜ‘((𝑥 + (i · 𝑦)) / i)))
6320, 22, 60, 62fmpt2co 7220 . . . . . . 7 (⊤ → (ℑ ∘ 𝐹) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (ℜ‘((𝑥 + (i · 𝑦)) / i))))
6463trud 1490 . . . . . 6 (ℑ ∘ 𝐹) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ (ℜ‘((𝑥 + (i · 𝑦)) / i)))
65 df2ndres 29366 . . . . . 6 (2nd ↾ (ℝ × ℝ)) = (𝑥 ∈ ℝ, 𝑦 ∈ ℝ ↦ 𝑦)
6658, 64, 653eqtr4ri 2654 . . . . 5 (2nd ↾ (ℝ × ℝ)) = (ℑ ∘ 𝐹)
67 fo2nd 7149 . . . . . 6 2nd :V–onto→V
68 fofn 6084 . . . . . 6 (2nd :V–onto→V → 2nd Fn V)
6967, 68ax-mp 5 . . . . 5 2nd Fn V
70 xp2nd 7159 . . . . 5 (𝑧 ∈ (ℝ × ℝ) → (2nd𝑧) ∈ ℝ)
7149, 51imsubd 13907 . . . . 5 ((𝑧 ∈ ran 𝐹𝑢 ∈ ran 𝐹) → (ℑ‘(𝑧𝑢)) = ((ℑ‘𝑧) − (ℑ‘𝑢)))
7266, 35, 69, 70, 71cnre2csqlem 29780 . . . 4 ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → (𝑌 ∈ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) → (abs‘(ℑ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷))
7353, 72anim12d 585 . . 3 ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → ((𝑌 ∈ ((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∧ 𝑌 ∈ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))) → ((abs‘(ℜ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷 ∧ (abs‘(ℑ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷)))
746, 73syl5bi 232 . 2 ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → (𝑌 ∈ (((1st ↾ (ℝ × ℝ)) “ (((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷))) ∩ ((2nd ↾ (ℝ × ℝ)) “ (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷)))) → ((abs‘(ℜ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷 ∧ (abs‘(ℑ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷)))
755, 74syl5bi 232 1 ((𝑋 ∈ (ℝ × ℝ) ∧ 𝑌 ∈ (ℝ × ℝ) ∧ 𝐷 ∈ ℝ+) → (𝑌 ∈ ((((1st𝑋) − 𝐷)(,)((1st𝑋) + 𝐷)) × (((2nd𝑋) − 𝐷)(,)((2nd𝑋) + 𝐷))) → ((abs‘(ℜ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷 ∧ (abs‘(ℑ‘((𝐹𝑌) − (𝐹𝑋)))) < 𝐷)))
 Colors of variables: wff setvar class Syntax hints:   → wi 4   ↔ wb 196   ∧ wa 384   ∧ w3a 1036   = wceq 1480  ⊤wtru 1481   ∈ wcel 1987  {cab 2607  ∀wral 2908  ∃wrex 2909  Vcvv 3190   ∩ cin 3559   ⊆ wss 3560   class class class wbr 4623   ↦ cmpt 4683   × cxp 5082  ◡ccnv 5083  ran crn 5085   ↾ cres 5086   “ cima 5087   ∘ ccom 5088   Fn wfn 5852  –onto→wfo 5855  ‘cfv 5857  (class class class)co 6615   ↦ cmpt2 6617  1st c1st 7126  2nd c2nd 7127  ℂcc 9894  ℝcr 9895  ici 9898   + caddc 9899   · cmul 9901   < clt 10034   − cmin 10226   / cdiv 10644  2c2 11030  ℝ+crp 11792  (,)cioo 12133  ∗ccj 13786  ℜcre 13787  ℑcim 13788  abscabs 13924 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-sep 4751  ax-nul 4759  ax-pow 4813  ax-pr 4877  ax-un 6914  ax-cnex 9952  ax-resscn 9953  ax-1cn 9954  ax-icn 9955  ax-addcl 9956  ax-addrcl 9957  ax-mulcl 9958  ax-mulrcl 9959  ax-mulcom 9960  ax-addass 9961  ax-mulass 9962  ax-distr 9963  ax-i2m1 9964  ax-1ne0 9965  ax-1rid 9966  ax-rnegex 9967  ax-rrecex 9968  ax-cnre 9969  ax-pre-lttri 9970  ax-pre-lttrn 9971  ax-pre-ltadd 9972  ax-pre-mulgt0 9973  ax-pre-sup 9974 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-pss 3576  df-nul 3898  df-if 4065  df-pw 4138  df-sn 4156  df-pr 4158  df-tp 4160  df-op 4162  df-uni 4410  df-iun 4494  df-br 4624  df-opab 4684  df-mpt 4685  df-tr 4723  df-eprel 4995  df-id 4999  df-po 5005  df-so 5006  df-fr 5043  df-we 5045  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-pred 5649  df-ord 5695  df-on 5696  df-lim 5697  df-suc 5698  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-om 7028  df-1st 7128  df-2nd 7129  df-wrecs 7367  df-recs 7428  df-rdg 7466  df-er 7702  df-en 7916  df-dom 7917  df-sdom 7918  df-sup 8308  df-pnf 10036  df-mnf 10037  df-xr 10038  df-ltxr 10039  df-le 10040  df-sub 10228  df-neg 10229  df-div 10645  df-nn 10981  df-2 11039  df-3 11040  df-n0 11253  df-z 11338  df-uz 11648  df-rp 11793  df-ioo 12137  df-seq 12758  df-exp 12817  df-cj 13789  df-re 13790  df-im 13791  df-sqrt 13925  df-abs 13926 This theorem is referenced by:  tpr2rico  29782
 Copyright terms: Public domain W3C validator