Zulip Chat Archive
Stream: new members
Topic: basic Union
Pedro Castilho (Nov 10 2020 at 04:41):
hi am trying to complete the second lean sorry
, but I don't really know what command I should use, I trying library search but didn't work.
it seem pretty straightforward getting y in union A form y in A i.
example : f '' (⋃ i, A i) = ⋃ i, f '' A i :=
begin
unfold image,
dsimp,
ext1,
split,
dsimp,
{sorry},
intro h,
simp at h,
dsimp,
cases h with i h1,
cases h1 with y h2,
use y,
split,
have h3 : y ∈ A i, from h2.1,
show y ∈ Union A, from sorry
Alex J. Best (Nov 10 2020 at 04:55):
rw mem_Union
Alex J. Best (Nov 10 2020 at 04:56):
Should take it into the form that you can then feed in that y \in A i
Pedro Castilho (Nov 10 2020 at 04:59):
thx, it worked, but how could I have known that?
Pedro Castilho (Nov 10 2020 at 05:02):
now am trying a different problem in which I have x ∈ Inter A
and am trying to reach x ∈ A I
Pedro Castilho (Nov 10 2020 at 05:04):
I tried to mimic your solution and gave a shot at rw mem_Inter
Pedro Castilho (Nov 10 2020 at 05:06):
oh, it did work when I applied it on the right place
Pedro Castilho (Nov 10 2020 at 05:06):
but still, how did you know what do next?
Alex J. Best (Nov 10 2020 at 05:15):
Pedro Castilho said:
thx, it worked, but how could I have known that?
with a little practice you can start guessing names of lemmas. You can also look in the file near where the term you are trying to get rid of is defined. if I click Union A
in vscode a little box pops up with an arrow which takes me to the definition, and I see the lemma mem_Union
a few lines below the definition. In fact in this case its a simp lemma, so simp
would also make progress here.
Alex J. Best (Nov 10 2020 at 05:15):
Screen-Shot-2020-11-10-at-00.15.21.png
Alex J. Best (Nov 10 2020 at 05:16):
The arrow
Pedro Castilho (Nov 10 2020 at 14:27):
I actually tried clicking in the def of Union but it gave an error
Pedro Castilho (Nov 10 2020 at 14:28):
so I wasn't able to lookup this method
Kevin Buzzard (Nov 10 2020 at 15:05):
Lean's maths library conforms to a pretty rigid naming convention, and VS Code provides a powerful interface to it. There's some #naming conventions which you might want to glance over.
Kevin Buzzard (Nov 10 2020 at 15:19):
You used library_search
too late @Pedro Castilho :-) Here's some proofs you might like :
import tactic
variables (I : Type) (X Y : Type) (f : X → Y) (A : I → set X)
open set -- so I don't have to keep writing set.blah
-- it's in the library
example : f '' (⋃ i, A i) = ⋃ i, f '' A i :=
begin
exact image_Union, -- I found this with `library_search`, but I could have guessed the name anyway
end
-- A powerful tactic can solve this by brute force
example : f '' (⋃ i, A i) = ⋃ i, f '' A i :=
begin
tidy
end
-- first principles proof -- click through it to see what's going on
example : f '' (⋃ i, A i) = ⋃ i, f '' A i :=
begin
ext y,
split,
{ rintro ⟨x, hx, rfl⟩,
rw mem_Union at *,
cases hx with i hi,
exact ⟨i, x, hi, rfl⟩ },
{ rw mem_Union,
rintro ⟨i, x, hxi, rfl⟩,
use x,
rw mem_Union,
exact ⟨⟨i, hxi⟩, rfl⟩ }
end
Pedro Castilho (Nov 11 2020 at 00:04):
uau, thank a lot @Kevin Buzzard , I didn't know about the names conventions that will really help
Pedro Castilho (Nov 11 2020 at 00:05):
and the proofs are great also
Kevin Buzzard (Nov 11 2020 at 00:06):
A great trick with the names is to half-guess what the name might be, type that, and then press ctrl-space to see possible completions
Kevin Buzzard (Nov 11 2020 at 00:30):
https://youtu.be/bghu6jVt0SY the second half of this shows the trick one can use
Last updated: Dec 20 2023 at 11:08 UTC