Theorem: Equiv.Perm.card_support_eq_two
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: constructor <;> intro h
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
⊢ f.support.card = 2 ↔ f.IsSwap
state_after: case mp
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
⊢ f.IsSwap

case mpr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.IsSwap
⊢ f.support.card = 2

tactic: obtain ⟨x, t, hmem, hins, ht⟩ := card_eq_succ.1 h
state_before: case mp
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
⊢ f.IsSwap
state_after: case mp.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x : α
t : Finset α
hmem : x ∉ t
hins : insert x t = f.support
ht : t.card = 1
⊢ f.IsSwap

tactic: obtain ⟨y, rfl⟩ := card_eq_one.1 ht
state_before: case mp.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x : α
t : Finset α
hmem : x ∉ t
hins : insert x t = f.support
ht : t.card = 1
⊢ f.IsSwap
state_after: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : x ∉ {y}
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f.IsSwap

tactic: rw [mem_singleton] at hmem
state_before: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : x ∉ {y}
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f.IsSwap
state_after: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f.IsSwap

tactic: refine ⟨x, y, hmem, ?_⟩
state_before: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f.IsSwap
state_after: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f = swap x y

tactic: ext a
state_before: case mp.intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
⊢ f = swap x y
state_after: case mp.intro.intro.intro.intro.intro.H
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
⊢ f a = (swap x y) a

tactic: have key : ∀ b, f b ≠ b ↔ _ := fun b => by rw [← mem_support, ← hins, mem_insert, mem_singleton]
state_before: case mp.intro.intro.intro.intro.intro.H
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
⊢ f a = (swap x y) a
state_after: case mp.intro.intro.intro.intro.intro.H
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
⊢ f a = (swap x y) a

tactic: by_cases ha : f a = a
state_before: case mp.intro.intro.intro.intro.intro.H
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
⊢ f a = (swap x y) a
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : f a = a
⊢ f a = (swap x y) a

case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : ¬f a = a
⊢ f a = (swap x y) a

tactic: rw [← mem_support, ← hins, mem_insert, mem_singleton]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a b : α
⊢ f b ≠ b ↔ ?m.66193 b
state_after: no goals

tactic: have ha' := not_or.mp (mt (key a).mpr (not_not.mpr ha))
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : f a = a
⊢ f a = (swap x y) a
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : f a = a
ha' : ¬a = x ∧ ¬a = y
⊢ f a = (swap x y) a

tactic: rw [ha, swap_apply_of_ne_of_ne ha'.1 ha'.2]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : f a = a
ha' : ¬a = x ∧ ¬a = y
⊢ f a = (swap x y) a
state_after: no goals

tactic: have ha' := (key (f a)).mp (mt f.apply_eq_iff_eq.mp ha)
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : ¬f a = a
⊢ f a = (swap x y) a
state_after: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : ¬f a = a
ha' : f a = x ∨ f a = y
⊢ f a = (swap x y) a

tactic: obtain rfl | rfl := (key a).mp ha
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x y : α
hmem : ¬x = y
hins : {x, y} = f.support
ht : {y}.card = 1
a : α
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = y
ha : ¬f a = a
ha' : f a = x ∨ f a = y
⊢ f a = (swap x y) a
state_after: case neg.inl
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
y : α
ht : {y}.card = 1
a : α
ha : ¬f a = a
hmem : ¬a = y
hins : {a, y} = f.support
key : ∀ (b : α), f b ≠ b ↔ b = a ∨ b = y
ha' : f a = a ∨ f a = y
⊢ f a = (swap a y) a

case neg.inr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x a : α
ha : ¬f a = a
hmem : ¬x = a
hins : {x, a} = f.support
ht : {a}.card = 1
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = a
ha' : f a = x ∨ f a = a
⊢ f a = (swap x a) a

tactic: rw [Or.resolve_left ha' ha, swap_apply_left]
state_before: case neg.inl
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
y : α
ht : {y}.card = 1
a : α
ha : ¬f a = a
hmem : ¬a = y
hins : {a, y} = f.support
key : ∀ (b : α), f b ≠ b ↔ b = a ∨ b = y
ha' : f a = a ∨ f a = y
⊢ f a = (swap a y) a
state_after: no goals

tactic: rw [Or.resolve_right ha' ha, swap_apply_right]
state_before: case neg.inr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.support.card = 2
x a : α
ha : ¬f a = a
hmem : ¬x = a
hins : {x, a} = f.support
ht : {a}.card = 1
key : ∀ (b : α), f b ≠ b ↔ b = x ∨ b = a
ha' : f a = x ∨ f a = a
⊢ f a = (swap x a) a
state_after: no goals

tactic: obtain ⟨x, y, hxy, rfl⟩ := h
state_before: case mpr
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
h : f.IsSwap
⊢ f.support.card = 2
state_after: case mpr.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
x y : α
hxy : x ≠ y
⊢ (swap x y).support.card = 2

tactic: exact card_support_swap hxy
state_before: case mpr.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
x y : α
hxy : x ≠ y
⊢ (swap x y).support.card = 2
state_after: no goals