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

tactic: by_cases hι : (IsEmpty ι)
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
⊢ IsBlock G (⋂ i, B i)
state_after: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : IsEmpty ι
⊢ IsBlock G (⋂ i, B i)

case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ IsBlock G (⋂ i, B i)

tactic: rw [IsBlock.def_one]
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ IsBlock G (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ ∀ (g : G), g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)

tactic: intro g
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ ∀ (g : G), g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)

tactic: rw [Set.smul_set_iInter]
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)

tactic: by_cases h : ∃ i : ι, Disjoint (g • B i) (B i)
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)

case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ¬∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)

tactic: suffices (⋂ i : ι, B i) = Set.univ by simpa only [this] using isBlock_top X
state_before: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : IsEmpty ι
⊢ IsBlock G (⋂ i, B i)
state_after: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : IsEmpty ι
⊢ ⋂ i, B i = Set.univ

tactic: simpa only [this] using isBlock_top X
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : IsEmpty ι
this : ⋂ i, B i = Set.univ
⊢ IsBlock G (⋂ i, B i)
state_after: no goals

tactic: right
state_before: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: case pos.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∃ i, Disjoint (g • B i) (B i)
⊢ Disjoint (⋂ i, g • B i) (⋂ i, B i)

tactic: obtain ⟨j, hj⟩ := h
state_before: case pos.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∃ i, Disjoint (g • B i) (B i)
⊢ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: case pos.h.intro
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
j : ι
hj : Disjoint (g • B j) (B j)
⊢ Disjoint (⋂ i, g • B i) (⋂ i, B i)

tactic: refine Disjoint.mono ?_ ?_ hj <;> apply Set.iInter_subset
state_before: case pos.h.intro
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
j : ι
hj : Disjoint (g • B j) (B j)
⊢ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: no goals

tactic: left
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ¬∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ¬∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i

tactic: simp only [not_exists] at h
state_before: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ¬∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i
state_after: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∀ (x : ι), ¬Disjoint (g • B x) (B x)
⊢ ⋂ i, g • B i = ⋂ i, B i

tactic: have : ∀ i : ι, g • B i = B i := fun i => ((hB i).smul_eq_or_disjoint g).resolve_right (h i)
state_before: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∀ (x : ι), ¬Disjoint (g • B x) (B x)
⊢ ⋂ i, g • B i = ⋂ i, B i
state_after: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∀ (x : ι), ¬Disjoint (g • B x) (B x)
this : ∀ (i : ι), g • B i = B i
⊢ ⋂ i, g • B i = ⋂ i, B i

tactic: rw [Set.iInter_congr this]
state_before: case neg.h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∀ (x : ι), ¬Disjoint (g • B x) (B x)
this : ∀ (i : ι), g • B i = B i
⊢ ⋂ i, g • B i = ⋂ i, B i
state_after: no goals