Theorem: Equiv.Perm.signAux3_mul_and_swap
File: Mathlib/GroupTheory/Perm/Sign.lean

tactic: obtain ⟨n, ⟨e⟩⟩ := Finite.exists_equiv_fin α
state_before: α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
s : Multiset α
hs : ∀ (x : α), x ∈ s
⊢ (f * g).signAux3 hs = f.signAux3 hs * g.signAux3 hs ∧ Pairwise fun x y => (swap x y).signAux3 hs = -1
state_after: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
s : Multiset α
hs : ∀ (x : α), x ∈ s
n : ℕ
e : α ≃ Fin n
⊢ (f * g).signAux3 hs = f.signAux3 hs * g.signAux3 hs ∧ Pairwise fun x y => (swap x y).signAux3 hs = -1

tactic: induction s using Quotient.inductionOn with | _ l => ?_
state_before: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
s : Multiset α
hs : ∀ (x : α), x ∈ s
n : ℕ
e : α ≃ Fin n
⊢ (f * g).signAux3 hs = f.signAux3 hs * g.signAux3 hs ∧ Pairwise fun x y => (swap x y).signAux3 hs = -1
state_after: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
⊢ (f * g).signAux3 hs = f.signAux3 hs * g.signAux3 hs ∧ Pairwise fun x y => (swap x y).signAux3 hs = -1

tactic: show
  signAux2 l (f * g) = signAux2 l f * signAux2 l g ∧
  Pairwise fun x y => signAux2 l (swap x y) = -1
state_before: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
⊢ (f * g).signAux3 hs = f.signAux3 hs * g.signAux3 hs ∧ Pairwise fun x y => (swap x y).signAux3 hs = -1
state_after: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g ∧ Pairwise fun x y => signAux2 l (swap x y) = -1

tactic: have hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e :=
  Equiv.ext fun h => by simp [mul_apply]
state_before: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g ∧ Pairwise fun x y => signAux2 l (swap x y) = -1
state_after: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g ∧ Pairwise fun x y => signAux2 l (swap x y) = -1

tactic: constructor
state_before: case intro.intro.h
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g ∧ Pairwise fun x y => signAux2 l (swap x y) = -1
state_after: case intro.intro.h.left
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g

case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ Pairwise fun x y => signAux2 l (swap x y) = -1

tactic: simp [mul_apply]
state_before: α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
h : Fin n
⊢ ((e.symm.trans (f * g)).trans e) h = ((e.symm.trans f).trans e * (e.symm.trans g).trans e) h
state_after: no goals

tactic: rw [← signAux_eq_signAux2 _ _ e fun _ _ => hs _, ←
  signAux_eq_signAux2 _ _ e fun _ _ => hs _, ← signAux_eq_signAux2 _ _ e fun _ _ => hs _,
  hfg, signAux_mul]
state_before: case intro.intro.h.left
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ signAux2 l (f * g) = signAux2 l f * signAux2 l g
state_after: no goals

tactic: intro x y hxy
state_before: case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
⊢ Pairwise fun x y => signAux2 l (swap x y) = -1
state_after: case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
x y : α
hxy : x ≠ y
⊢ signAux2 l (swap x y) = -1

tactic: rw [← e.injective.ne_iff] at hxy
state_before: case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
x y : α
hxy : x ≠ y
⊢ signAux2 l (swap x y) = -1
state_after: case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
x y : α
hxy : e x ≠ e y
⊢ signAux2 l (swap x y) = -1

tactic: rw [← signAux_eq_signAux2 _ _ e fun _ _ => hs _, symm_trans_swap_trans, signAux_swap hxy]
state_before: case intro.intro.h.right
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
f g : Perm α
n : ℕ
e : α ≃ Fin n
l : List α
hs : ∀ (x : α), x ∈ ⟦l⟧
hfg : (e.symm.trans (f * g)).trans e = (e.symm.trans f).trans e * (e.symm.trans g).trans e
x y : α
hxy : e x ≠ e y
⊢ signAux2 l (swap x y) = -1
state_after: no goals