Theorem: Equiv.Perm.Disjoint.isConj_mul
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: cases nonempty_fintype α
state_before: ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ π ρ : Perm α
hc1 : IsConj σ π
hc2 : IsConj τ ρ
hd1 : Disjoint σ τ
hd2 : Disjoint π ρ
⊢ IsConj (σ * τ) (π * ρ)

tactic: obtain ⟨f, rfl⟩ := isConj_iff.1 hc1
state_before: case intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ π ρ : Perm α
hc1 : IsConj σ π
hc2 : IsConj τ ρ
hd1 : Disjoint σ τ
hd2 : Disjoint π ρ
val✝ : Fintype α
⊢ IsConj (σ * τ) (π * ρ)

tactic: obtain ⟨g, rfl⟩ := isConj_iff.1 hc2
state_before: case intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ ρ : Perm α
hc2 : IsConj τ ρ
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) ρ
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * ρ)

tactic: have hd1' := coe_inj.2 hd1.support_mul
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: have hd2' := coe_inj.2 hd2.support_mul
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ ∪ support τ)
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: rw [coe_union] at *
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ ∪ support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹) ∪ support (g * τ * g⁻¹))
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: have hd1'' := disjoint_coe.2 (disjoint_iff_disjoint_support.1 hd1)
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: have hd2'' := disjoint_coe.2 (disjoint_iff_disjoint_support.1 hd2)
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: refine' isConj_of_support_equiv _ _
state_before: case intro.intro.intro
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
⊢ IsConj (σ * τ) (f * σ * f⁻¹ * (g * τ * g⁻¹))

tactic: simp only [Set.mem_image, toEmbedding_apply, exists_eq_right, support_conj, coe_map,
  apply_eq_iff_eq]
state_before: case intro.intro.intro.refine'_1.refine'_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
a : α
⊢ a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹))

tactic: intro x hx
state_before: case intro.intro.intro.refine'_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
⊢ ∀ (x : α) (hx : x ∈ ↑(support (σ * τ))),
    ↑(↑(((Set.ofEq hd1').trans (Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))).trans
              ((Equiv.sumCongr (subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹))))
                    (subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹))))).trans
                ((Set.ofEq hd2').trans (Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥))).symm))
          { val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) }) =
      ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
        ↑(↑(((Set.ofEq hd1').trans (Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))).trans
                ((Equiv.sumCongr (subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹))))
                      (subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹))))).trans
                  ((Set.ofEq hd2').trans
                      (Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥))).symm))
            { val := x, property := hx })

tactic: simp only [trans_apply, symm_trans_apply, Equiv.Set.ofEq_apply, Equiv.Set.ofEq_symm_apply,
  Equiv.sumCongr_apply]
state_before: case intro.intro.intro.refine'_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
⊢ ↑(↑(((Set.ofEq hd1').trans (Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))).trans
            ((Equiv.sumCongr (subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹))))
                  (subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹))))).trans
              ((Set.ofEq hd2').trans (Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥))).symm))
        { val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) }) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(((Set.ofEq hd1').trans (Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))).trans
              ((Equiv.sumCongr (subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹))))
                    (subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹))))).trans
                ((Set.ofEq hd2').trans (Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥))).symm))
          { val := x, property := hx })

tactic: rw [hd1', Set.mem_union] at hx
state_before: case intro.intro.intro.refine'_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: cases' hx with hxσ hxτ
state_before: case intro.intro.intro.refine'_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx✝ : x ∈ ↑(support (σ * τ))
hx : x ∈ ↑(support σ) ∨ x ∈ ↑(support τ)
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx✝ } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: rw [mem_coe, mem_support] at hxσ
state_before: case intro.intro.intro.refine'_2.inl
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : x ∈ ↑(support σ)
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: rw [Set.union_apply_left hd1''.le_bot _, Set.union_apply_left hd1''.le_bot _]
state_before: case intro.intro.intro.refine'_2.inl
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: simp only [subtypeEquiv_apply, Perm.coe_mul, Sum.map_inl, comp_apply,
  Set.union_symm_apply_left, Subtype.coe_mk, apply_eq_iff_eq]
state_before: case intro.intro.intro.refine'_2.inl
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (Sum.inl
            {
              val :=
                ↑{ val := ↑(σ * τ) x,
                    property :=
                      (_ :
                        ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                          ↑(support σ) ∪ ↑(support τ)) },
              property := ?m.3053395 }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (Sum.inl
              {
                val :=
                  ↑{ val := x,
                      property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) },
                property := ?m.3053769 })))

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support σ)

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑{ val := x, property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support σ)

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support σ)

tactic: have h := (hd2 (f x)).resolve_left ?_
state_before: case intro.intro.intro.refine'_2.inl
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑τ x = ↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑f x))))

tactic: rw [mul_apply, mul_apply] at h
state_before: case intro.intro.intro.refine'_2.inl.refine_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
h : ↑(g * τ * g⁻¹) (↑f x) = ↑f x
⊢ ↑τ x = ↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑f x))))

tactic: rw [h, inv_apply_self, (hd1 x).resolve_left hxσ]
state_before: case intro.intro.intro.refine'_2.inl.refine_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
h : ↑g (↑τ (↑g⁻¹ (↑f x))) = ↑f x
⊢ ↑τ x = ↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑f x))))

tactic: rwa [mul_apply, mul_apply, inv_apply_self, apply_eq_iff_eq]
state_before: case intro.intro.intro.refine'_2.inl.refine_1
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ¬↑(f * σ * f⁻¹) (↑f x) = ↑f x

tactic: rwa [Subtype.coe_mk, Perm.mul_apply, (hd1 x).resolve_left hxσ, mem_coe,
  apply_mem_support, mem_support]
state_before: ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support σ)

tactic: rwa [Subtype.coe_mk, mem_coe, mem_support]
state_before: ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxσ : ↑σ x ≠ x
⊢ ↑{ val := x, property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support σ)

tactic: rw [mem_coe, ← apply_mem_support, mem_support] at hxτ
state_before: case intro.intro.intro.refine'_2.inr
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : x ∈ ↑(support τ)
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: rw [Set.union_apply_right hd1''.le_bot _, Set.union_apply_right hd1''.le_bot _]
state_before: case intro.intro.intro.refine'_2.inr
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
            { val := ↑(σ * τ) x,
              property :=
                (_ :
                  ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                    ↑(support σ) ∪ ↑(support τ)) }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (↑(Set.union (_ : ↑(support σ) ⊓ ↑(support τ) ≤ ⊥))
              { val := x,
                property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) })))

tactic: simp only [subtypeEquiv_apply, Perm.coe_mul, Sum.map_inr, comp_apply,
  Set.union_symm_apply_right, Subtype.coe_mk, apply_eq_iff_eq]
state_before: case intro.intro.intro.refine'_2.inr
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
        (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
          (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
          (Sum.inr
            {
              val :=
                ↑{ val := ↑(σ * τ) x,
                    property :=
                      (_ :
                        ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
                          ↑(support σ) ∪ ↑(support τ)) },
              property := ?m.3057896 }))) =
    ↑(f * σ * f⁻¹ * (g * τ * g⁻¹))
      ↑(↑(Set.union (_ : ↑(support (f * σ * f⁻¹)) ⊓ ↑(support (g * τ * g⁻¹)) ≤ ⊥)).symm
          (Sum.map (↑(subtypeEquiv f (_ : ∀ (a : α), a ∈ ↑(support σ) ↔ ↑f a ∈ ↑(support (f * σ * f⁻¹)))))
            (↑(subtypeEquiv g (_ : ∀ (a : α), a ∈ ↑(support τ) ↔ ↑g a ∈ ↑(support (g * τ * g⁻¹)))))
            (Sum.inr
              {
                val :=
                  ↑{ val := x,
                      property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) },
                property := ?m.3058005 })))

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support τ)

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑{ val := x, property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support τ)

ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support τ)

tactic: have h := (hd2 (g (τ x))).resolve_right ?_
state_before: case intro.intro.intro.refine'_2.inr
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑g (↑σ (↑τ x)) = ↑f (↑σ (↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑g x))))))

tactic: rw [mul_apply, mul_apply] at h
state_before: case intro.intro.intro.refine'_2.inr.refine_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
h : ↑(f * σ * f⁻¹) (↑g (↑τ x)) = ↑g (↑τ x)
⊢ ↑g (↑σ (↑τ x)) = ↑f (↑σ (↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑g x))))))

tactic: rw [inv_apply_self, h, (hd1 (τ x)).resolve_right hxτ]
state_before: case intro.intro.intro.refine'_2.inr.refine_2
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
h : ↑f (↑σ (↑f⁻¹ (↑g (↑τ x)))) = ↑g (↑τ x)
⊢ ↑g (↑σ (↑τ x)) = ↑f (↑σ (↑f⁻¹ (↑g (↑τ (↑g⁻¹ (↑g x))))))

tactic: rwa [mul_apply, mul_apply, inv_apply_self, apply_eq_iff_eq]
state_before: case intro.intro.intro.refine'_2.inr.refine_1
ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ¬↑(g * τ * g⁻¹) (↑g (↑τ x)) = ↑g (↑τ x)

tactic: rwa [Subtype.coe_mk, Perm.mul_apply, (hd1 (τ x)).resolve_right hxτ,
  mem_coe, mem_support]
state_before: ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑{ val := ↑(σ * τ) x,
        property :=
          (_ :
            ↑(Equiv.refl α) ↑{ val := ↑(σ * τ) x, property := (_ : ↑(σ * τ) x ∈ support (σ * τ)) } ∈
              ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support τ)

tactic: rwa [Subtype.coe_mk, mem_coe, ← apply_mem_support, mem_support]
state_before: ι : Type ?u.3042712
α✝ : Type ?u.3042715
β : Type ?u.3042718
inst✝² : DecidableEq α✝
inst✝¹ : Fintype α✝
σ✝ τ✝ : Perm α✝
α : Type u_1
inst✝ : Finite α
σ τ : Perm α
hd1 : Disjoint σ τ
val✝ : Fintype α
f : Perm α
hc1 : IsConj σ (f * σ * f⁻¹)
g : Perm α
hc2 : IsConj τ (g * τ * g⁻¹)
hd2 : Disjoint (f * σ * f⁻¹) (g * τ * g⁻¹)
hd1' : ↑(support (σ * τ)) = ↑(support σ) ∪ ↑(support τ)
hd2' : ↑(support (f * σ * f⁻¹ * (g * τ * g⁻¹))) = ↑(support (f * σ * f⁻¹)) ∪ ↑(support (g * τ * g⁻¹))
hd1'' : _root_.Disjoint ↑(support σ) ↑(support τ)
hd2'' : _root_.Disjoint ↑(support (f * σ * f⁻¹)) ↑(support (g * τ * g⁻¹))
x : α
hx : x ∈ ↑(support (σ * τ))
hxτ : ↑τ (↑τ x) ≠ ↑τ x
⊢ ↑{ val := x, property := (_ : ↑(Equiv.refl α) ↑{ val := x, property := hx } ∈ ↑(support σ) ∪ ↑(support τ)) } ∈
    ↑(support τ)