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

Theorem tgcl 22913
Description: Show that a basis generates a topology. Remark in [Munkres] p. 79. (Contributed by NM, 17-Jul-2006.)
Assertion
Ref Expression
tgcl (𝐵 ∈ TopBases → (topGen‘𝐵) ∈ Top)

Proof of Theorem tgcl
Dummy variables 𝑥 𝑦 𝑧 𝑢 𝑡 𝑣 𝑤 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 uniss 4871 . . . . . . . 8 (𝑢 ⊆ (topGen‘𝐵) → 𝑢 (topGen‘𝐵))
21adantl 481 . . . . . . 7 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → 𝑢 (topGen‘𝐵))
3 unitg 22911 . . . . . . . 8 (𝐵 ∈ TopBases → (topGen‘𝐵) = 𝐵)
43adantr 480 . . . . . . 7 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → (topGen‘𝐵) = 𝐵)
52, 4sseqtrd 3970 . . . . . 6 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → 𝑢 𝐵)
6 eluni2 4867 . . . . . . . 8 (𝑥 𝑢 ↔ ∃𝑡𝑢 𝑥𝑡)
7 ssel2 3928 . . . . . . . . . . . 12 ((𝑢 ⊆ (topGen‘𝐵) ∧ 𝑡𝑢) → 𝑡 ∈ (topGen‘𝐵))
8 eltg2b 22903 . . . . . . . . . . . . . . 15 (𝐵 ∈ TopBases → (𝑡 ∈ (topGen‘𝐵) ↔ ∀𝑥𝑡𝑦𝐵 (𝑥𝑦𝑦𝑡)))
9 rsp 3224 . . . . . . . . . . . . . . 15 (∀𝑥𝑡𝑦𝐵 (𝑥𝑦𝑦𝑡) → (𝑥𝑡 → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡)))
108, 9biimtrdi 253 . . . . . . . . . . . . . 14 (𝐵 ∈ TopBases → (𝑡 ∈ (topGen‘𝐵) → (𝑥𝑡 → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡))))
1110imp31 417 . . . . . . . . . . . . 13 (((𝐵 ∈ TopBases ∧ 𝑡 ∈ (topGen‘𝐵)) ∧ 𝑥𝑡) → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡))
1211an32s 652 . . . . . . . . . . . 12 (((𝐵 ∈ TopBases ∧ 𝑥𝑡) ∧ 𝑡 ∈ (topGen‘𝐵)) → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡))
137, 12sylan2 593 . . . . . . . . . . 11 (((𝐵 ∈ TopBases ∧ 𝑥𝑡) ∧ (𝑢 ⊆ (topGen‘𝐵) ∧ 𝑡𝑢)) → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡))
1413an42s 661 . . . . . . . . . 10 (((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) ∧ (𝑡𝑢𝑥𝑡)) → ∃𝑦𝐵 (𝑥𝑦𝑦𝑡))
15 elssuni 4894 . . . . . . . . . . . . . 14 (𝑡𝑢𝑡 𝑢)
16 sstr2 3940 . . . . . . . . . . . . . 14 (𝑦𝑡 → (𝑡 𝑢𝑦 𝑢))
1715, 16syl5com 31 . . . . . . . . . . . . 13 (𝑡𝑢 → (𝑦𝑡𝑦 𝑢))
1817anim2d 612 . . . . . . . . . . . 12 (𝑡𝑢 → ((𝑥𝑦𝑦𝑡) → (𝑥𝑦𝑦 𝑢)))
1918reximdv 3151 . . . . . . . . . . 11 (𝑡𝑢 → (∃𝑦𝐵 (𝑥𝑦𝑦𝑡) → ∃𝑦𝐵 (𝑥𝑦𝑦 𝑢)))
2019ad2antrl 728 . . . . . . . . . 10 (((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) ∧ (𝑡𝑢𝑥𝑡)) → (∃𝑦𝐵 (𝑥𝑦𝑦𝑡) → ∃𝑦𝐵 (𝑥𝑦𝑦 𝑢)))
2114, 20mpd 15 . . . . . . . . 9 (((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) ∧ (𝑡𝑢𝑥𝑡)) → ∃𝑦𝐵 (𝑥𝑦𝑦 𝑢))
2221rexlimdvaa 3138 . . . . . . . 8 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → (∃𝑡𝑢 𝑥𝑡 → ∃𝑦𝐵 (𝑥𝑦𝑦 𝑢)))
236, 22biimtrid 242 . . . . . . 7 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → (𝑥 𝑢 → ∃𝑦𝐵 (𝑥𝑦𝑦 𝑢)))
2423ralrimiv 3127 . . . . . 6 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → ∀𝑥 𝑢𝑦𝐵 (𝑥𝑦𝑦 𝑢))
255, 24jca 511 . . . . 5 ((𝐵 ∈ TopBases ∧ 𝑢 ⊆ (topGen‘𝐵)) → ( 𝑢 𝐵 ∧ ∀𝑥 𝑢𝑦𝐵 (𝑥𝑦𝑦 𝑢)))
2625ex 412 . . . 4 (𝐵 ∈ TopBases → (𝑢 ⊆ (topGen‘𝐵) → ( 𝑢 𝐵 ∧ ∀𝑥 𝑢𝑦𝐵 (𝑥𝑦𝑦 𝑢))))
27 eltg2 22902 . . . 4 (𝐵 ∈ TopBases → ( 𝑢 ∈ (topGen‘𝐵) ↔ ( 𝑢 𝐵 ∧ ∀𝑥 𝑢𝑦𝐵 (𝑥𝑦𝑦 𝑢))))
2826, 27sylibrd 259 . . 3 (𝐵 ∈ TopBases → (𝑢 ⊆ (topGen‘𝐵) → 𝑢 ∈ (topGen‘𝐵)))
2928alrimiv 1928 . 2 (𝐵 ∈ TopBases → ∀𝑢(𝑢 ⊆ (topGen‘𝐵) → 𝑢 ∈ (topGen‘𝐵)))
30 inss1 4189 . . . . . . . 8 (𝑢𝑣) ⊆ 𝑢
31 tg1 22908 . . . . . . . 8 (𝑢 ∈ (topGen‘𝐵) → 𝑢 𝐵)
3230, 31sstrid 3945 . . . . . . 7 (𝑢 ∈ (topGen‘𝐵) → (𝑢𝑣) ⊆ 𝐵)
3332ad2antrl 728 . . . . . 6 ((𝐵 ∈ TopBases ∧ (𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵))) → (𝑢𝑣) ⊆ 𝐵)
34 eltg2 22902 . . . . . . . . . . . . 13 (𝐵 ∈ TopBases → (𝑢 ∈ (topGen‘𝐵) ↔ (𝑢 𝐵 ∧ ∀𝑥𝑢𝑧𝐵 (𝑥𝑧𝑧𝑢))))
3534simplbda 499 . . . . . . . . . . . 12 ((𝐵 ∈ TopBases ∧ 𝑢 ∈ (topGen‘𝐵)) → ∀𝑥𝑢𝑧𝐵 (𝑥𝑧𝑧𝑢))
36 rsp 3224 . . . . . . . . . . . 12 (∀𝑥𝑢𝑧𝐵 (𝑥𝑧𝑧𝑢) → (𝑥𝑢 → ∃𝑧𝐵 (𝑥𝑧𝑧𝑢)))
3735, 36syl 17 . . . . . . . . . . 11 ((𝐵 ∈ TopBases ∧ 𝑢 ∈ (topGen‘𝐵)) → (𝑥𝑢 → ∃𝑧𝐵 (𝑥𝑧𝑧𝑢)))
38 eltg2 22902 . . . . . . . . . . . . 13 (𝐵 ∈ TopBases → (𝑣 ∈ (topGen‘𝐵) ↔ (𝑣 𝐵 ∧ ∀𝑥𝑣𝑤𝐵 (𝑥𝑤𝑤𝑣))))
3938simplbda 499 . . . . . . . . . . . 12 ((𝐵 ∈ TopBases ∧ 𝑣 ∈ (topGen‘𝐵)) → ∀𝑥𝑣𝑤𝐵 (𝑥𝑤𝑤𝑣))
40 rsp 3224 . . . . . . . . . . . 12 (∀𝑥𝑣𝑤𝐵 (𝑥𝑤𝑤𝑣) → (𝑥𝑣 → ∃𝑤𝐵 (𝑥𝑤𝑤𝑣)))
4139, 40syl 17 . . . . . . . . . . 11 ((𝐵 ∈ TopBases ∧ 𝑣 ∈ (topGen‘𝐵)) → (𝑥𝑣 → ∃𝑤𝐵 (𝑥𝑤𝑤𝑣)))
4237, 41im2anan9 620 . . . . . . . . . 10 (((𝐵 ∈ TopBases ∧ 𝑢 ∈ (topGen‘𝐵)) ∧ (𝐵 ∈ TopBases ∧ 𝑣 ∈ (topGen‘𝐵))) → ((𝑥𝑢𝑥𝑣) → (∃𝑧𝐵 (𝑥𝑧𝑧𝑢) ∧ ∃𝑤𝐵 (𝑥𝑤𝑤𝑣))))
43 elin 3917 . . . . . . . . . 10 (𝑥 ∈ (𝑢𝑣) ↔ (𝑥𝑢𝑥𝑣))
44 reeanv 3208 . . . . . . . . . 10 (∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)) ↔ (∃𝑧𝐵 (𝑥𝑧𝑧𝑢) ∧ ∃𝑤𝐵 (𝑥𝑤𝑤𝑣)))
4542, 43, 443imtr4g 296 . . . . . . . . 9 (((𝐵 ∈ TopBases ∧ 𝑢 ∈ (topGen‘𝐵)) ∧ (𝐵 ∈ TopBases ∧ 𝑣 ∈ (topGen‘𝐵))) → (𝑥 ∈ (𝑢𝑣) → ∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣))))
4645anandis 678 . . . . . . . 8 ((𝐵 ∈ TopBases ∧ (𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵))) → (𝑥 ∈ (𝑢𝑣) → ∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣))))
47 elin 3917 . . . . . . . . . . . . . . . . 17 (𝑥 ∈ (𝑧𝑤) ↔ (𝑥𝑧𝑥𝑤))
4847biimpri 228 . . . . . . . . . . . . . . . 16 ((𝑥𝑧𝑥𝑤) → 𝑥 ∈ (𝑧𝑤))
49 ss2in 4197 . . . . . . . . . . . . . . . 16 ((𝑧𝑢𝑤𝑣) → (𝑧𝑤) ⊆ (𝑢𝑣))
5048, 49anim12i 613 . . . . . . . . . . . . . . 15 (((𝑥𝑧𝑥𝑤) ∧ (𝑧𝑢𝑤𝑣)) → (𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)))
5150an4s 660 . . . . . . . . . . . . . 14 (((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)) → (𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)))
52 basis2 22895 . . . . . . . . . . . . . . . . 17 (((𝐵 ∈ TopBases ∧ 𝑧𝐵) ∧ (𝑤𝐵𝑥 ∈ (𝑧𝑤))) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)))
5352adantllr 719 . . . . . . . . . . . . . . . 16 ((((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) ∧ (𝑤𝐵𝑥 ∈ (𝑧𝑤))) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)))
5453adantrrr 725 . . . . . . . . . . . . . . 15 ((((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) ∧ (𝑤𝐵 ∧ (𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)))) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)))
55 sstr2 3940 . . . . . . . . . . . . . . . . . . . 20 (𝑡 ⊆ (𝑧𝑤) → ((𝑧𝑤) ⊆ (𝑢𝑣) → 𝑡 ⊆ (𝑢𝑣)))
5655com12 32 . . . . . . . . . . . . . . . . . . 19 ((𝑧𝑤) ⊆ (𝑢𝑣) → (𝑡 ⊆ (𝑧𝑤) → 𝑡 ⊆ (𝑢𝑣)))
5756anim2d 612 . . . . . . . . . . . . . . . . . 18 ((𝑧𝑤) ⊆ (𝑢𝑣) → ((𝑥𝑡𝑡 ⊆ (𝑧𝑤)) → (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
5857reximdv 3151 . . . . . . . . . . . . . . . . 17 ((𝑧𝑤) ⊆ (𝑢𝑣) → (∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
5958adantl 481 . . . . . . . . . . . . . . . 16 ((𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)) → (∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6059ad2antll 729 . . . . . . . . . . . . . . 15 ((((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) ∧ (𝑤𝐵 ∧ (𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)))) → (∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑧𝑤)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6154, 60mpd 15 . . . . . . . . . . . . . 14 ((((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) ∧ (𝑤𝐵 ∧ (𝑥 ∈ (𝑧𝑤) ∧ (𝑧𝑤) ⊆ (𝑢𝑣)))) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))
6251, 61sylanr2 683 . . . . . . . . . . . . 13 ((((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) ∧ (𝑤𝐵 ∧ ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)))) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))
6362rexlimdvaa 3138 . . . . . . . . . . . 12 (((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) ∧ 𝑧𝐵) → (∃𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6463rexlimdva 3137 . . . . . . . . . . 11 ((𝐵 ∈ TopBases ∧ 𝑥 ∈ (𝑢𝑣)) → (∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6564ex 412 . . . . . . . . . 10 (𝐵 ∈ TopBases → (𝑥 ∈ (𝑢𝑣) → (∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))))
6665a2d 29 . . . . . . . . 9 (𝐵 ∈ TopBases → ((𝑥 ∈ (𝑢𝑣) → ∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣))) → (𝑥 ∈ (𝑢𝑣) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))))
6766imp 406 . . . . . . . 8 ((𝐵 ∈ TopBases ∧ (𝑥 ∈ (𝑢𝑣) → ∃𝑧𝐵𝑤𝐵 ((𝑥𝑧𝑧𝑢) ∧ (𝑥𝑤𝑤𝑣)))) → (𝑥 ∈ (𝑢𝑣) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6846, 67syldan 591 . . . . . . 7 ((𝐵 ∈ TopBases ∧ (𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵))) → (𝑥 ∈ (𝑢𝑣) → ∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
6968ralrimiv 3127 . . . . . 6 ((𝐵 ∈ TopBases ∧ (𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵))) → ∀𝑥 ∈ (𝑢𝑣)∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))
7033, 69jca 511 . . . . 5 ((𝐵 ∈ TopBases ∧ (𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵))) → ((𝑢𝑣) ⊆ 𝐵 ∧ ∀𝑥 ∈ (𝑢𝑣)∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣))))
7170ex 412 . . . 4 (𝐵 ∈ TopBases → ((𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵)) → ((𝑢𝑣) ⊆ 𝐵 ∧ ∀𝑥 ∈ (𝑢𝑣)∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))))
72 eltg2 22902 . . . 4 (𝐵 ∈ TopBases → ((𝑢𝑣) ∈ (topGen‘𝐵) ↔ ((𝑢𝑣) ⊆ 𝐵 ∧ ∀𝑥 ∈ (𝑢𝑣)∃𝑡𝐵 (𝑥𝑡𝑡 ⊆ (𝑢𝑣)))))
7371, 72sylibrd 259 . . 3 (𝐵 ∈ TopBases → ((𝑢 ∈ (topGen‘𝐵) ∧ 𝑣 ∈ (topGen‘𝐵)) → (𝑢𝑣) ∈ (topGen‘𝐵)))
7473ralrimivv 3177 . 2 (𝐵 ∈ TopBases → ∀𝑢 ∈ (topGen‘𝐵)∀𝑣 ∈ (topGen‘𝐵)(𝑢𝑣) ∈ (topGen‘𝐵))
75 fvex 6847 . . 3 (topGen‘𝐵) ∈ V
76 istopg 22839 . . 3 ((topGen‘𝐵) ∈ V → ((topGen‘𝐵) ∈ Top ↔ (∀𝑢(𝑢 ⊆ (topGen‘𝐵) → 𝑢 ∈ (topGen‘𝐵)) ∧ ∀𝑢 ∈ (topGen‘𝐵)∀𝑣 ∈ (topGen‘𝐵)(𝑢𝑣) ∈ (topGen‘𝐵))))
7775, 76ax-mp 5 . 2 ((topGen‘𝐵) ∈ Top ↔ (∀𝑢(𝑢 ⊆ (topGen‘𝐵) → 𝑢 ∈ (topGen‘𝐵)) ∧ ∀𝑢 ∈ (topGen‘𝐵)∀𝑣 ∈ (topGen‘𝐵)(𝑢𝑣) ∈ (topGen‘𝐵)))
7829, 74, 77sylanbrc 583 1 (𝐵 ∈ TopBases → (topGen‘𝐵) ∈ Top)
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 206  wa 395  wal 1539   = wceq 1541  wcel 2113  wral 3051  wrex 3060  Vcvv 3440  cin 3900  wss 3901   cuni 4863  cfv 6492  topGenctg 17357  Topctop 22837  TopBasesctb 22889
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 1968  ax-7 2009  ax-8 2115  ax-9 2123  ax-10 2146  ax-11 2162  ax-12 2184  ax-ext 2708  ax-sep 5241  ax-nul 5251  ax-pow 5310  ax-pr 5377  ax-un 7680
This theorem depends on definitions:  df-bi 207  df-an 396  df-or 848  df-3an 1088  df-tru 1544  df-fal 1554  df-ex 1781  df-nf 1785  df-sb 2068  df-mo 2539  df-eu 2569  df-clab 2715  df-cleq 2728  df-clel 2811  df-nfc 2885  df-ne 2933  df-ral 3052  df-rex 3061  df-rab 3400  df-v 3442  df-dif 3904  df-un 3906  df-in 3908  df-ss 3918  df-nul 4286  df-if 4480  df-pw 4556  df-sn 4581  df-pr 4583  df-op 4587  df-uni 4864  df-br 5099  df-opab 5161  df-mpt 5180  df-id 5519  df-xp 5630  df-rel 5631  df-cnv 5632  df-co 5633  df-dm 5634  df-iota 6448  df-fun 6494  df-fv 6500  df-topgen 17363  df-top 22838  df-bases 22890
This theorem is referenced by:  tgclb  22914  tgtopon  22915  bastop  22925  elcls3  23027  resttop  23104  leordtval2  23156  tgcmp  23345  2ndctop  23391  2ndcsb  23393  2ndcsep  23403  txtop  23513  pttop  23526  xkotop  23532  alexsubALT  23995  retop  24705  onsuctop  36627  kelac2lem  43306
  Copyright terms: Public domain W3C validator