Theorem: MulAction.IsBlock.def_one
File: Mathlib/GroupTheory/GroupAction/Blocks.lean

tactic: refine ⟨IsBlock.smul_eq_or_disjoint, ?_⟩
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
⊢ IsBlock G B ↔ ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) → IsBlock G B

tactic: rw [IsBlock.def]
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) → IsBlock G B
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) → ∀ (g g' : G), g • B = g' • B ∨ Disjoint (g • B) (g' • B)

tactic: intro hB g g'
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) → ∀ (g g' : G), g • B = g' • B ∨ Disjoint (g • B) (g' • B)
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ g • B = g' • B ∨ Disjoint (g • B) (g' • B)

tactic: apply (hB (g'⁻¹ * g)).imp
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ g • B = g' • B ∨ Disjoint (g • B) (g' • B)
state_after: case f
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ (g'⁻¹ * g) • B = B → g • B = g' • B

case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ Disjoint ((g'⁻¹ * g) • B) B → Disjoint (g • B) (g' • B)

tactic: rw [← smul_smul, ← eq_inv_smul_iff, inv_inv]
state_before: case f
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ (g'⁻¹ * g) • B = B → g • B = g' • B
state_after: case f
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ g • B = g' • B → g • B = g' • B

tactic: exact id
state_before: case f
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ g • B = g' • B → g • B = g' • B
state_after: no goals

tactic: intro h
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
⊢ Disjoint ((g'⁻¹ * g) • B) B → Disjoint (g • B) (g' • B)
state_after: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : Disjoint ((g'⁻¹ * g) • B) B
⊢ Disjoint (g • B) (g' • B)

tactic: rw [Set.disjoint_iff] at h ⊢
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : Disjoint ((g'⁻¹ * g) • B) B
⊢ Disjoint (g • B) (g' • B)
state_after: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
⊢ g • B ∩ g' • B ⊆ ∅

tactic: rintro x hx
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
⊢ g • B ∩ g' • B ⊆ ∅
state_after: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ x ∈ ∅

tactic: suffices g'⁻¹ • x ∈ (g'⁻¹ * g) • B ∩ B by apply h this
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ x ∈ ∅
state_after: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ g'⁻¹ • x ∈ (g'⁻¹ * g) • B ∩ B

tactic: simp only [Set.mem_inter_iff, ← Set.mem_smul_set_iff_inv_smul_mem, ← smul_smul, smul_inv_smul]
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ g'⁻¹ • x ∈ (g'⁻¹ * g) • B ∩ B
state_after: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ x ∈ g • B ∧ x ∈ g' • B

tactic: exact hx
state_before: case g
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
⊢ x ∈ g • B ∧ x ∈ g' • B
state_after: no goals

tactic: apply h this
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
hB : ∀ (g : G), g • B = B ∨ Disjoint (g • B) B
g g' : G
h : (g'⁻¹ * g) • B ∩ B ⊆ ∅
x : X
hx : x ∈ g • B ∩ g' • B
this : g'⁻¹ • x ∈ (g'⁻¹ * g) • B ∩ B
⊢ x ∈ ∅
state_after: no goals