Zulip Chat Archive
Stream: new members
Topic: How to use h'
tsuki hao (Jul 18 2023 at 13:02):
import Mathlib.Tactic
import Mathlib.Data.Real.Basic
import Mathlib.Algebra.Group.Basic
import Mathlib.GroupTheory.Subgroup.Basic
def IsA (S : Type u) {α : Type v} [SetLike S α] (s : Set α) : Prop :=
∃ (m : S), (m : Set α) = s
variable (G : Type _ ) [Group G]
example (H₁ H₂ : Subgroup G) (h : IsA (Subgroup G) (H₁ ∪ H₂)) : H₁ ≤ H₂ ∨ H₂ ≤ H₁ := by
by_contra h'
sorry
Can somone tell me how the h' should be used here?
Kevin Buzzard (Jul 18 2023 at 13:27):
Your question is vague. You can use h'
in lots of ways. What do you want to turn h'
into? Can you write your question in Lean rather than in text?
Here is a possible continuation:
simp only [SetLike.le_def] at h'
push_neg at h'
rcases h' with ⟨⟨x, hx1, hx2⟩, ⟨y, hy2, hy1⟩⟩
Kyle Miller (Jul 18 2023 at 13:42):
Maybe you'd start like this instead of by_contra
?
example (H₁ H₂ : Subgroup G) (h : IsA (Subgroup G) (H₁ ∪ H₂)) : H₁ ≤ H₂ ∨ H₂ ≤ H₁ := by
obtain ⟨H, h'⟩ := h
replace h' := Set.ext_iff.mp h'
simp only [SetLike.mem_coe, Set.mem_union] at h'
/-
H₁ H₂ H : Subgroup G
h' : ∀ (x : G), x ∈ H ↔ x ∈ H₁ ∨ x ∈ H₂
⊢ H₁ ≤ H₂ ∨ H₂ ≤ H₁
-/
sorry
tsuki hao (Jul 18 2023 at 14:16):
Kevin Buzzard said:
Your question is vague. You can use
h'
in lots of ways. What do you want to turnh'
into? Can you write your question in Lean rather than in text?Here is a possible continuation:
simp only [SetLike.le_def] at h' push_neg at h' rcases h' with ⟨⟨x, hx1, hx2⟩, ⟨y, hy2, hy1⟩⟩
Thanks for your answer, that's exactly what I was looking for
tsuki hao (Jul 18 2023 at 14:16):
Kyle Miller said:
Maybe you'd start like this instead of
by_contra
?example (H₁ H₂ : Subgroup G) (h : IsA (Subgroup G) (H₁ ∪ H₂)) : H₁ ≤ H₂ ∨ H₂ ≤ H₁ := by obtain ⟨H, h'⟩ := h replace h' := Set.ext_iff.mp h' simp only [SetLike.mem_coe, Set.mem_union] at h' /- H₁ H₂ H : Subgroup G h' : ∀ (x : G), x ∈ H ↔ x ∈ H₁ ∨ x ∈ H₂ ⊢ H₁ ≤ H₂ ∨ H₂ ≤ H₁ -/ sorry
Thank you, maybe it's ok to write like this, I'll try it later
Martin Dvořák (Jul 18 2023 at 14:28):
I was trying to do it as an exercise and got stuck here:
import Mathlib.Tactic
import Mathlib.GroupTheory.Subgroup.Basic
def IsA (S : Type) {α : Type} [SetLike S α] (s : Set α) : Prop :=
∃ (m : S), (m : Set α) = s
example {G : Type} [Group G] (H₁ H₂ : Subgroup G) (hyp : IsA (Subgroup G) (H₁ ∪ H₂)) :
H₁ ≤ H₂ ∨ H₂ ≤ H₁ :=
by
by_contra contr
push_neg at contr
obtain ⟨a, a_in, a_ni⟩ : ∃ a ∈ H₁, a ∉ H₂
· exact Iff.mp Set.not_subset contr.1
obtain ⟨b, b_in, b_ni⟩ : ∃ b ∈ H₂, b ∉ H₁
· exact Iff.mp Set.not_subset contr.2
clear contr
have a_in_union : a ∈ (H₁ ∪ H₂ : Set G)
· exact Set.mem_union_left (↑H₂) a_in
have b_in_union : b ∈ (H₁ ∪ H₂ : Set G)
· exact Set.mem_union_right (↑H₁) b_in
have ab_in_union : a * b ∈ (H₁ ∪ H₂ : Set G)
· sorry
sorry
I think I need to access something like hyp.mul_mem'
but differently. How can I do it?
Also, is there a better way to write a ∈ (H₁ : Set G) ∪ (H₂ : Set G)
and so on?
Kyle Miller (Jul 18 2023 at 14:29):
I'd expect a ∈ (H₁ ∪ H₂ : Set G)
to work
Martin Dvořák (Jul 18 2023 at 14:29):
Thanks. I updated the post above.
I still don't know how to prove a * b ∈ (H₁ ∪ H₂ : Set G)
tho.
Kevin Buzzard (Jul 18 2023 at 15:11):
Is this a Lean question or a maths question?
Martin Dvořák (Jul 18 2023 at 15:18):
Lean question. I have:
a ∈ (H₁ ∪ H₂ : Set G)
b ∈ (H₁ ∪ H₂ : Set G)
IsA (Subgroup G) (H₁ ∪ H₂)
I need:
a * b ∈ (H₁ ∪ H₂ : Set G)
I just don't know how to access mul_mem'
of the hypothesis.
Martin Dvořák (Jul 18 2023 at 15:21):
I have trouble switching between viewing H₁ ∪ H₂
as a set and viewing H₁ ∪ H₂
as a structure.
Kyle Miller (Jul 18 2023 at 15:26):
This IsA
thing isn't great to work with directly. In this message I gave a couple tactics to eliminate it
Martin Dvořák (Jul 18 2023 at 15:29):
Is there a mathlib declaration that would allow me to say " H₁ ∪ H₂
is a subgroup of G
"?
Kyle Miller (Jul 18 2023 at 15:32):
Yeah, docs#IsSubgroup. See also this thread from today, which this topic is continuing.
Last updated: Dec 20 2023 at 11:08 UTC