Theorem: Set.card_mul_le
File: Mathlib/Data/Finset/Pointwise.lean

tactic: obtain h | h := (s * t).infinite_or_finite
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t
state_after: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Infinite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t

case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Finite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t

tactic: obtain ⟨hs, ht⟩ | rfl | rfl := finite_mul.1 h
state_before: case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Finite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t
state_after: case inr.inl.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Finite
hs : s.Finite
ht : t.Finite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t

case inr.inr.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
t : Set α
h : (∅ * t).Finite
⊢ Nat.card ↑(∅ * t) ≤ Nat.card ↑∅ * Nat.card ↑t

case inr.inr.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s : Set α
h : (s * ∅).Finite
⊢ Nat.card ↑(s * ∅) ≤ Nat.card ↑s * Nat.card ↑∅

tactic: all_goals simp
state_before: case inr.inr.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
t : Set α
h : (∅ * t).Finite
⊢ Nat.card ↑(∅ * t) ≤ Nat.card ↑∅ * Nat.card ↑t

case inr.inr.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s : Set α
h : (s * ∅).Finite
⊢ Nat.card ↑(s * ∅) ≤ Nat.card ↑s * Nat.card ↑∅
state_after: no goals

tactic: simp [Set.Infinite.card_eq_zero h]
state_before: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Infinite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t
state_after: no goals

tactic: lift s to Finset α using hs
state_before: case inr.inl.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Set α
h : (s * t).Finite
hs : s.Finite
ht : t.Finite
⊢ Nat.card ↑(s * t) ≤ Nat.card ↑s * Nat.card ↑t
state_after: case inr.inl.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
t : Set α
ht : t.Finite
s : Finset α
h : (↑s * t).Finite
⊢ Nat.card ↑(↑s * t) ≤ Nat.card ↑↑s * Nat.card ↑t

tactic: lift t to Finset α using ht
state_before: case inr.inl.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
t : Set α
ht : t.Finite
s : Finset α
h : (↑s * t).Finite
⊢ Nat.card ↑(↑s * t) ≤ Nat.card ↑↑s * Nat.card ↑t
state_after: case inr.inl.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Finset α
h : (↑s * ↑t).Finite
⊢ Nat.card ↑(↑s * ↑t) ≤ Nat.card ↑↑s * Nat.card ↑↑t

tactic: rw [← Finset.coe_mul]
state_before: case inr.inl.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Finset α
h : (↑s * ↑t).Finite
⊢ Nat.card ↑(↑s * ↑t) ≤ Nat.card ↑↑s * Nat.card ↑↑t
state_after: case inr.inl.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Finset α
h : (↑s * ↑t).Finite
⊢ Nat.card ↑↑(s * t) ≤ Nat.card ↑↑s * Nat.card ↑↑t

tactic: simpa [-Finset.coe_mul] using Finset.card_mul_le
state_before: case inr.inl.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s t : Finset α
h : (↑s * ↑t).Finite
⊢ Nat.card ↑↑(s * t) ≤ Nat.card ↑↑s * Nat.card ↑↑t
state_after: no goals

tactic: simp
state_before: case inr.inr.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Mul α
inst✝ : IsCancelMul α
s : Set α
h : (s * ∅).Finite
⊢ Nat.card ↑(s * ∅) ≤ Nat.card ↑s * Nat.card ↑∅
state_after: no goals