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

Theorem cnrest2 21000
Description: Equivalence of continuity in the parent topology and continuity in a subspace. (Contributed by Jeff Hankins, 10-Jul-2009.) (Proof shortened by Mario Carneiro, 21-Aug-2015.)
Assertion
Ref Expression
cnrest2 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))))

Proof of Theorem cnrest2
Dummy variables 𝑥 𝑦 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 cntop1 20954 . . . 4 (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐽 ∈ Top)
21a1i 11 . . 3 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐽 ∈ Top))
3 eqid 2621 . . . . . . . 8 𝐽 = 𝐽
4 eqid 2621 . . . . . . . 8 𝐾 = 𝐾
53, 4cnf 20960 . . . . . . 7 (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐹: 𝐽 𝐾)
6 ffn 6002 . . . . . . 7 (𝐹: 𝐽 𝐾𝐹 Fn 𝐽)
75, 6syl 17 . . . . . 6 (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐹 Fn 𝐽)
87a1i 11 . . . . 5 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐹 Fn 𝐽))
9 simp2 1060 . . . . 5 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → ran 𝐹𝐵)
108, 9jctird 566 . . . 4 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) → (𝐹 Fn 𝐽 ∧ ran 𝐹𝐵)))
11 df-f 5851 . . . 4 (𝐹: 𝐽𝐵 ↔ (𝐹 Fn 𝐽 ∧ ran 𝐹𝐵))
1210, 11syl6ibr 242 . . 3 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) → 𝐹: 𝐽𝐵))
132, 12jcad 555 . 2 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) → (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)))
14 cntop1 20954 . . . . 5 (𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)) → 𝐽 ∈ Top)
1514adantl 482 . . . 4 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → 𝐽 ∈ Top)
163toptopon 20648 . . . . . 6 (𝐽 ∈ Top ↔ 𝐽 ∈ (TopOn‘ 𝐽))
1715, 16sylib 208 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → 𝐽 ∈ (TopOn‘ 𝐽))
18 resttopon 20875 . . . . . . 7 ((𝐾 ∈ (TopOn‘𝑌) ∧ 𝐵𝑌) → (𝐾t 𝐵) ∈ (TopOn‘𝐵))
19183adant2 1078 . . . . . 6 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐾t 𝐵) ∈ (TopOn‘𝐵))
2019adantr 481 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → (𝐾t 𝐵) ∈ (TopOn‘𝐵))
21 simpr 477 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)))
22 cnf2 20963 . . . . 5 ((𝐽 ∈ (TopOn‘ 𝐽) ∧ (𝐾t 𝐵) ∈ (TopOn‘𝐵) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → 𝐹: 𝐽𝐵)
2317, 20, 21, 22syl3anc 1323 . . . 4 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → 𝐹: 𝐽𝐵)
2415, 23jca 554 . . 3 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))) → (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵))
2524ex 450 . 2 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)) → (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)))
26 vex 3189 . . . . . . . . 9 𝑥 ∈ V
2726inex1 4759 . . . . . . . 8 (𝑥𝐵) ∈ V
2827a1i 11 . . . . . . 7 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → (𝑥𝐵) ∈ V)
29 simpl1 1062 . . . . . . . 8 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐾 ∈ (TopOn‘𝑌))
30 toponmax 20643 . . . . . . . . . 10 (𝐾 ∈ (TopOn‘𝑌) → 𝑌𝐾)
3129, 30syl 17 . . . . . . . . 9 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝑌𝐾)
32 simpl3 1064 . . . . . . . . 9 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐵𝑌)
3331, 32ssexd 4765 . . . . . . . 8 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐵 ∈ V)
34 elrest 16009 . . . . . . . 8 ((𝐾 ∈ (TopOn‘𝑌) ∧ 𝐵 ∈ V) → (𝑦 ∈ (𝐾t 𝐵) ↔ ∃𝑥𝐾 𝑦 = (𝑥𝐵)))
3529, 33, 34syl2anc 692 . . . . . . 7 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (𝑦 ∈ (𝐾t 𝐵) ↔ ∃𝑥𝐾 𝑦 = (𝑥𝐵)))
36 imaeq2 5421 . . . . . . . . 9 (𝑦 = (𝑥𝐵) → (𝐹𝑦) = (𝐹 “ (𝑥𝐵)))
3736eleq1d 2683 . . . . . . . 8 (𝑦 = (𝑥𝐵) → ((𝐹𝑦) ∈ 𝐽 ↔ (𝐹 “ (𝑥𝐵)) ∈ 𝐽))
3837adantl 482 . . . . . . 7 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑦 = (𝑥𝐵)) → ((𝐹𝑦) ∈ 𝐽 ↔ (𝐹 “ (𝑥𝐵)) ∈ 𝐽))
3928, 35, 38ralxfr2d 4842 . . . . . 6 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽 ↔ ∀𝑥𝐾 (𝐹 “ (𝑥𝐵)) ∈ 𝐽))
40 simplrr 800 . . . . . . . . . 10 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → 𝐹: 𝐽𝐵)
41 ffun 6005 . . . . . . . . . 10 (𝐹: 𝐽𝐵 → Fun 𝐹)
42 inpreima 6298 . . . . . . . . . 10 (Fun 𝐹 → (𝐹 “ (𝑥𝐵)) = ((𝐹𝑥) ∩ (𝐹𝐵)))
4340, 41, 423syl 18 . . . . . . . . 9 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → (𝐹 “ (𝑥𝐵)) = ((𝐹𝑥) ∩ (𝐹𝐵)))
44 cnvimass 5444 . . . . . . . . . . . 12 (𝐹𝑥) ⊆ dom 𝐹
45 cnvimarndm 5445 . . . . . . . . . . . 12 (𝐹 “ ran 𝐹) = dom 𝐹
4644, 45sseqtr4i 3617 . . . . . . . . . . 11 (𝐹𝑥) ⊆ (𝐹 “ ran 𝐹)
47 simpll2 1099 . . . . . . . . . . . 12 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → ran 𝐹𝐵)
48 imass2 5460 . . . . . . . . . . . 12 (ran 𝐹𝐵 → (𝐹 “ ran 𝐹) ⊆ (𝐹𝐵))
4947, 48syl 17 . . . . . . . . . . 11 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → (𝐹 “ ran 𝐹) ⊆ (𝐹𝐵))
5046, 49syl5ss 3594 . . . . . . . . . 10 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → (𝐹𝑥) ⊆ (𝐹𝐵))
51 df-ss 3569 . . . . . . . . . 10 ((𝐹𝑥) ⊆ (𝐹𝐵) ↔ ((𝐹𝑥) ∩ (𝐹𝐵)) = (𝐹𝑥))
5250, 51sylib 208 . . . . . . . . 9 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → ((𝐹𝑥) ∩ (𝐹𝐵)) = (𝐹𝑥))
5343, 52eqtrd 2655 . . . . . . . 8 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → (𝐹 “ (𝑥𝐵)) = (𝐹𝑥))
5453eleq1d 2683 . . . . . . 7 ((((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) ∧ 𝑥𝐾) → ((𝐹 “ (𝑥𝐵)) ∈ 𝐽 ↔ (𝐹𝑥) ∈ 𝐽))
5554ralbidva 2979 . . . . . 6 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (∀𝑥𝐾 (𝐹 “ (𝑥𝐵)) ∈ 𝐽 ↔ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽))
56 simprr 795 . . . . . . . 8 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐹: 𝐽𝐵)
5756, 32fssd 6014 . . . . . . 7 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐹: 𝐽𝑌)
5857biantrurd 529 . . . . . 6 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽 ↔ (𝐹: 𝐽𝑌 ∧ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽)))
5939, 55, 583bitrrd 295 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → ((𝐹: 𝐽𝑌 ∧ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽) ↔ ∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽))
6056biantrurd 529 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽 ↔ (𝐹: 𝐽𝐵 ∧ ∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽)))
6159, 60bitrd 268 . . . 4 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → ((𝐹: 𝐽𝑌 ∧ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽) ↔ (𝐹: 𝐽𝐵 ∧ ∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽)))
62 simprl 793 . . . . . 6 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐽 ∈ Top)
6362, 16sylib 208 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → 𝐽 ∈ (TopOn‘ 𝐽))
64 iscn 20949 . . . . 5 ((𝐽 ∈ (TopOn‘ 𝐽) ∧ 𝐾 ∈ (TopOn‘𝑌)) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ (𝐹: 𝐽𝑌 ∧ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽)))
6563, 29, 64syl2anc 692 . . . 4 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ (𝐹: 𝐽𝑌 ∧ ∀𝑥𝐾 (𝐹𝑥) ∈ 𝐽)))
6619adantr 481 . . . . 5 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (𝐾t 𝐵) ∈ (TopOn‘𝐵))
67 iscn 20949 . . . . 5 ((𝐽 ∈ (TopOn‘ 𝐽) ∧ (𝐾t 𝐵) ∈ (TopOn‘𝐵)) → (𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)) ↔ (𝐹: 𝐽𝐵 ∧ ∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽)))
6863, 66, 67syl2anc 692 . . . 4 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)) ↔ (𝐹: 𝐽𝐵 ∧ ∀𝑦 ∈ (𝐾t 𝐵)(𝐹𝑦) ∈ 𝐽)))
6961, 65, 683bitr4d 300 . . 3 (((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) ∧ (𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵)) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))))
7069ex 450 . 2 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → ((𝐽 ∈ Top ∧ 𝐹: 𝐽𝐵) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵)))))
7113, 25, 70pm5.21ndd 369 1 ((𝐾 ∈ (TopOn‘𝑌) ∧ ran 𝐹𝐵𝐵𝑌) → (𝐹 ∈ (𝐽 Cn 𝐾) ↔ 𝐹 ∈ (𝐽 Cn (𝐾t 𝐵))))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 196  wa 384  w3a 1036   = wceq 1480  wcel 1987  wral 2907  wrex 2908  Vcvv 3186  cin 3554  wss 3555   cuni 4402  ccnv 5073  dom cdm 5074  ran crn 5075  cima 5077  Fun wfun 5841   Fn wfn 5842  wf 5843  cfv 5847  (class class class)co 6604  t crest 16002  Topctop 20617  TopOnctopon 20618   Cn ccn 20938
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 4731  ax-sep 4741  ax-nul 4749  ax-pow 4803  ax-pr 4867  ax-un 6902
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-ral 2912  df-rex 2913  df-reu 2914  df-rab 2916  df-v 3188  df-sbc 3418  df-csb 3515  df-dif 3558  df-un 3560  df-in 3562  df-ss 3569  df-pss 3571  df-nul 3892  df-if 4059  df-pw 4132  df-sn 4149  df-pr 4151  df-tp 4153  df-op 4155  df-uni 4403  df-int 4441  df-iun 4487  df-br 4614  df-opab 4674  df-mpt 4675  df-tr 4713  df-eprel 4985  df-id 4989  df-po 4995  df-so 4996  df-fr 5033  df-we 5035  df-xp 5080  df-rel 5081  df-cnv 5082  df-co 5083  df-dm 5084  df-rn 5085  df-res 5086  df-ima 5087  df-pred 5639  df-ord 5685  df-on 5686  df-lim 5687  df-suc 5688  df-iota 5810  df-fun 5849  df-fn 5850  df-f 5851  df-f1 5852  df-fo 5853  df-f1o 5854  df-fv 5855  df-ov 6607  df-oprab 6608  df-mpt2 6609  df-om 7013  df-1st 7113  df-2nd 7114  df-wrecs 7352  df-recs 7413  df-rdg 7451  df-oadd 7509  df-er 7687  df-map 7804  df-en 7900  df-fin 7903  df-fi 8261  df-rest 16004  df-topgen 16025  df-top 20621  df-bases 20622  df-topon 20623  df-cn 20941
This theorem is referenced by:  cnrest2r  21001  rncmp  21109  connima  21138  conncn  21139  kgencn2  21270  kgencn3  21271  qtoprest  21430  hmeores  21484  symgtgp  21815  submtmd  21818  subgtgp  21819  metdcn2  22550  metdscn2  22568  cnmptre  22634  iimulcn  22645  icchmeo  22648  evth  22666  evth2  22667  lebnumlem2  22669  reparphti  22705  efrlim  24596  rmulccn  29756  raddcn  29757  xrge0mulc1cn  29769  cvxpconn  30932  cvxsconn  30933  cvmliftmolem1  30971  cvmliftlem8  30982  cvmlift2lem9  31001  cvmlift3lem6  31014  ivthALT  31972  knoppcnlem10  32134  broucube  33075  areacirclem2  33133  cnres2  33194  cnresima  33195  refsumcn  38672  icccncfext  39404
  Copyright terms: Public domain W3C validator