Zulip Chat Archive
Stream: new members
Topic: Prove set membership
Florestan (Mar 11 2021 at 15:18):
I'm trying to understand the construction of set.
I would like to prove that something is a member a of a set defined by a predicate, for example:
def S := {x : real | x*x <= 2}
example : coe 0 ∈ S :=
begin
sorry
end
but the goal is
⊢ ↑0 ∈ S
when I want it to be
↑0*↑0 <= 2
Sebastien Gouezel (Mar 11 2021 at 15:29):
Two approaches:
def S := {x : real | x*x <= 2}
example : (0 : ℝ) ∈ S :=
begin
dsimp [S],
norm_num,
end
example : (0 : ℝ) ∈ S :=
begin
change (0 : ℝ) * 0 ≤ 2,
norm_num
end
In the first one, you ask Lean to expand the definition of S. In the second one, you do the expansion yourself, but you ask Lean to check that this is still the same question (this is the role of change)
Florestan (Mar 11 2021 at 15:31):
Great, thank you !
Rémy Degenne (Mar 11 2021 at 15:33):
And instead of using change you can also write rw set.mem_set_of_eq (docs#set.mem_set_of_eq). That lemma states a ∈ {a : α | p a} = p a.
Colin Jones ⚛️ (Feb 02 2024 at 15:17):
How would I prove this?
import Mathlib
example {x : ℕ} : x ∈ {1, 3} ↔ x = 1 ∨ x = 3 := by apply?
It's giving me an error due to metavariables which says "typeclass instance problem is stuck, it is often due to metavariables Membership ℕ ?m.394534".
Ruben Van de Velde (Feb 02 2024 at 15:18):
Is {1, 3} a Set, Finset, something else? Lean doesn't know
Colin Jones ⚛️ (Feb 02 2024 at 15:19):
Ruben Van de Velde said:
Is
{1, 3}a Set, Finset, something else? Lean doesn't know
How would I let lean know that it's a Finset?
Bolton Bailey (Feb 02 2024 at 15:20):
import Mathlib
example {x : ℕ} : x ∈ ({1, 3} : Finset ℕ) ↔ x = 1 ∨ x = 3 := by apply?
Colin Jones ⚛️ (Feb 02 2024 at 15:23):
Okay that fixes the metavariable problem, but I still need help with the proof. The tactic apply? and rw? aren't helping me out.
Colin Jones ⚛️ (Feb 02 2024 at 15:24):
Oh nevermind here's is how I proved it:
import Mathlib
example {x : ℕ} : x ∈ ({1, 3} : Finset ℕ) ↔ x = 1 ∨ x = 3 := by simp only [mem_singleton, mem_insert]
Thank you for your help
Bolton Bailey (Feb 02 2024 at 15:24):
FWIW, rw? gives the suggestion rw [@Finset.mem_insert], which is a good start.
Bolton Bailey (Feb 02 2024 at 15:25):
I agree it is not particularly helpful that apply? gives suggestions which are errors though.
Kevin Buzzard (Feb 02 2024 at 21:10):
import Mathlib
example {x : ℕ} : x ∈ ({1, 3} : Finset ℕ) ↔ x = 1 ∨ x = 3 := by aesop
Kevin Buzzard (Feb 02 2024 at 21:10):
import Mathlib
example {x : ℕ} : x ∈ ({1, 3} : Finset ℕ) ↔ x = 1 ∨ x = 3 := by simp
Last updated: May 02 2025 at 03:31 UTC