# Zulip Chat Archive

## Stream: general

### Topic: Prove that the image of a map is finite

#### Klaus Mattis (Feb 01 2021 at 10:51):

Hello,

I'm relatively new to lean (I learned about lean a year ago, I did the natural numbers game, but only started to use it more seriously the last week).

So I thought a good starting project would be "a cont. bij. map from a compact space to a hausdorff space is a homeo".

At the moment I have a mostly working proof of "compact subset in a hausdorff space is closed", but I'm stuck at the following problem:

(To remind you, the proof is roughly the following: Let A be the compact set, let x be a point not in A, for every point in A choose a neighborhood disjoint to a neighborhood of x, get a finite subcover, and use the intersection of the corresponding neighborhoods of x as open nbhd of x disjoint to A)

So I have the finite subcover of A, and I built a "function" of the following type:

```
have f: Π u : subcover, { p : nhds_of X x | p.1 ∩ u = ∅ }, by ...
```

(for every open u in the subcover, we get a nbhd of x, which is disjoint to u)

Then our finite set of nbhds of x would be the range of this subcover, this works.

Now I have trouble showing that the range is finite.

I used `finite_image`

, but this does not work, because the function's domain is not the Type set X, but a subtype of it,

for it to work, one apparently needs a function `set X -> set X`

, and then it gives you that the image of `subcover`

is finite.

So I built the following "workaround":

I defined a function

` let tempfun : set X → set X := λ u, if hu : u ∈ subcover then (f ⟨u, by assumption⟩).1.1 else ∅,`

Then I proofed that the image of `subcover`

is finite by using `finite_image`

First question: Can we avoid this weird workarounds?

Second question: Later I need to use that `tempfun u = f (<u, hu>)`

, (where `hu : u ∈ subcover`

),

which should be a trivial proof, but I don't know how to do it.

Thanks in advance!

Apologies if these questions are dumb or obvious, but I searched the web for quite a while and found nothing helpful :(

#### Klaus Mattis (Feb 01 2021 at 10:55):

To be precise in the second question: I made a mistake, I want to show `tempfun u = f (<u, hu>).1.1`

. which gets the underlying set of the neighborhood with the condition that it is disjoint to u.

#### Eric Wieser (Feb 01 2021 at 10:59):

I think you'd be a lot more likely to get help with an #mwe, it's difficult to solve "how do I do this trivial proof" questions without having exactly the same set of lean-based hurdles in front of us as you do.

#### Kevin Buzzard (Feb 01 2021 at 11:03):

I proved compact subspace of a Hausdorff space is closed using this "classical" approach in one of my Twitch streams over the summer: the code is here. I wrote a lot of comments. In mathlib they give a completely different proof using filters.

#### Klaus Mattis (Feb 01 2021 at 11:16):

Ok, yeah looks like a great idea to make a mwe :)

So it would be the following code:

```
import topology.basic
open set
lemma image_of_fin_set_is_finite
(A : Type) (B : Type) (s : set A) (hs : finite s) (f : s → B)
: finite (range f) := begin
--exact finite_image f hs, does not work, since finite_image expects f to start at A
sorry,
end
```

And thanks, @Kevin Buzzard , I will look at your code!

#### Johan Commelin (Feb 01 2021 at 11:18):

@Klaus Mattis that code snippet is a bit "too minimal". Please include `import foobar.quux`

in the code snippets, so that people can copy paste them into a new file and immediately have compiling code.

#### Klaus Mattis (Feb 01 2021 at 11:22):

I edited it in the above code.

#### Johan Commelin (Feb 01 2021 at 11:29):

```
lemma image_of_fin_set_is_finite
(A : Type) (B : Type) (s : set A) (hs : finite s) (f : s → B) :
finite (range f) :=
begin
convert finite_range _,
exact hs.fintype
end
```

#### Klaus Mattis (Feb 01 2021 at 11:44):

Ok, thanks a lot!

Last updated: May 13 2021 at 22:15 UTC