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

Proof steps:
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
⊢ IsBlock G B ↔ IsBlock G (Subtype.val '' B)
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) ↔
    ∀ (g : G), g • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (g • Subtype.val '' B) (Subtype.val '' B)
tactic: simp only [IsBlock.def_one]
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
⊢ (∀ (g : G), g • B = B ∨ Disjoint (g • B) B) ↔
    ∀ (g : G), g • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (g • Subtype.val '' B) (Subtype.val '' B)
state_after: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
⊢ ∀ (a : G),
    a • B = B ∨ Disjoint (a • B) B ↔
      a • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (a • Subtype.val '' B) (Subtype.val '' B)
tactic: apply forall_congr'
state_before: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
⊢ ∀ (a : G),
    a • B = B ∨ Disjoint (a • B) B ↔
      a • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (a • Subtype.val '' B) (Subtype.val '' B)
state_after: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ g • B = B ∨ Disjoint (g • B) B ↔
    g • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (g • Subtype.val '' B) (Subtype.val '' B)
tactic: intro g
state_before: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ g • B = B ∨ Disjoint (g • B) B ↔
    g • Subtype.val '' B = Subtype.val '' B ∨ Disjoint (g • Subtype.val '' B) (Subtype.val '' B)
state_after: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ (fun a => ↑a) '' (g • B) = (fun a => ↑a) '' B ∨ Disjoint (g • B) B ↔
    ⇑C.inclusion '' (g • B) = ⇑C.inclusion '' B ∨ Disjoint (⇑C.inclusion '' (g • B)) (⇑C.inclusion '' B)
tactic: rw [← SubMulAction.inclusion.coe_eq, ← image_smul_set _ _ _ C.inclusion g B,
    ← Set.image_eq_image Subtype.coe_injective]
state_before: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ (fun a => ↑a) '' (g • B) = (fun a => ↑a) '' B ∨ Disjoint (g • B) B ↔
    ⇑C.inclusion '' (g • B) = ⇑C.inclusion '' B ∨ Disjoint (⇑C.inclusion '' (g • B)) (⇑C.inclusion '' B)
state_after: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ Disjoint (g • B) B ↔ Disjoint (⇑C.inclusion '' (g • B)) (⇑C.inclusion '' B)
tactic: apply or_congr Iff.rfl
state_before: case h
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
C : SubMulAction G X
B : Set ↥C
g : G
⊢ Disjoint (g • B) B ↔ Disjoint (⇑C.inclusion '' (g • B)) (⇑C.inclusion '' B)
state_after: no goals
tactic: simp only [Set.disjoint_iff, Set.subset_empty_iff, Set.image_eq_empty,
    ← C.inclusion_injective.injOn.image_inter (Set.subset_univ _) (Set.subset_univ _)]