Theorem: List.zipWith_swap_prod_support'
File: Mathlib/GroupTheory/Perm/List.lean

tactic: simp only [Set.sup_eq_union, Set.le_eq_subset]
state_before: α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x : α
l l' : List α
⊢ {x | ↑(prod (zipWith swap l l')) x ≠ x} ≤ ↑(toFinset l ⊔ toFinset l')

tactic: induction' l with y l hl generalizing l'
state_before: α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x : α
l l' : List α
⊢ {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')

tactic: simp
state_before: case nil
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l : List α
x : α
l'✝ l' : List α
⊢ {x | ↑(prod (zipWith swap [] l')) x ≠ x} ⊆ ↑(toFinset [] ⊔ toFinset l')

tactic: cases' l' with z l'
state_before: case cons
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
l' : List α
⊢ {x | ↑(prod (zipWith swap (y :: l) l')) x ≠ x} ⊆ ↑(toFinset (y :: l) ⊔ toFinset l')

tactic: simp
state_before: case cons.nil
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x : α
l' : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
⊢ {x | ↑(prod (zipWith swap (y :: l) [])) x ≠ x} ⊆ ↑(toFinset (y :: l) ⊔ toFinset [])

tactic: intro x
state_before: case cons.cons
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
⊢ {x | ↑(prod (zipWith swap (y :: l) (z :: l'))) x ≠ x} ⊆ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: simp only [Set.union_subset_iff, mem_cons, zipWith_cons_cons, foldr, prod_cons,
  mul_apply]
state_before: case cons.cons
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
⊢ x ∈ {x | ↑(prod (zipWith swap (y :: l) (z :: l'))) x ≠ x} → x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: intro hx
state_before: case cons.cons
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
⊢ x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x} → x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: by_cases h : x ∈ { x | (zipWith swap l l').prod x ≠ x }
state_before: case cons.cons
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: specialize hl l' h
state_before: case pos
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : x ∈ {x | ↑(prod (zipWith swap l l')) x ≠ x}
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: simp only [ge_iff_le, Finset.le_eq_subset, Finset.sup_eq_union, Finset.coe_union,
  coe_toFinset, Set.mem_union, Set.mem_setOf_eq] at hl
state_before: case pos
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : x ∈ {x | ↑(prod (zipWith swap l l')) x ≠ x}
hl : x ∈ ↑(toFinset l ⊔ toFinset l')
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: simp only [Finset.coe_insert, Set.mem_insert_iff, Finset.mem_coe, toFinset_cons,
  mem_toFinset] at hm⊢
state_before: case pos.refine'_2
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : x ∈ {x | ↑(prod (zipWith swap l l')) x ≠ x}
hl : x ∈ l ∨ x ∈ l'
hm : x ∈ l'
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: simp [hm]
state_before: case pos.refine'_2
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : x ∈ {x | ↑(prod (zipWith swap l l')) x ≠ x}
hl : x ∈ l ∨ x ∈ l'
hm : x ∈ l'
⊢ x ∈ insert y (toFinset l) ⊔ insert z (toFinset l')

tactic: simp only [not_not, Set.mem_setOf_eq] at h
state_before: case neg
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : ¬x ∈ {x | ↑(prod (zipWith swap l l')) x ≠ x}
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: simp only [h, Set.mem_setOf_eq] at hx
state_before: case neg
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
hx : x ∈ {x | ↑(swap y z) (↑(prod (zipWith swap l l')) x) ≠ x}
h : ↑(prod (zipWith swap l l')) x = x
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: rw [swap_apply_ne_self_iff] at hx
state_before: case neg
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
h : ↑(prod (zipWith swap l l')) x = x
hx : ↑(swap y z) x ≠ x
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))

tactic: rcases hx with ⟨hyz, rfl | rfl⟩ <;> simp
state_before: case neg
α : Type u_1
β : Type ?u.671533
inst✝ : DecidableEq α
l✝ : List α
x✝ : α
l'✝ : List α
y : α
l : List α
hl : ∀ (l' : List α), {x | ↑(prod (zipWith swap l l')) x ≠ x} ⊆ ↑(toFinset l ⊔ toFinset l')
z : α
l' : List α
x : α
h : ↑(prod (zipWith swap l l')) x = x
hx : y ≠ z ∧ (x = y ∨ x = z)
⊢ x ∈ ↑(toFinset (y :: l) ⊔ toFinset (z :: l'))