Theorem: WithBot.unbot'_zero_mul
File: Mathlib/Algebra/Order/Ring/WithTop.lean

tactic: by_cases ha : a = 0
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : a = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b

case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b

tactic: by_cases hb : b = 0
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
hb : b = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b

case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
hb : ¬b = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b

tactic: induction a
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
hb : ¬b = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b
state_after: case neg.bot
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b✝ b : WithBot α
hb : ¬b = 0
ha : ¬⊥ = 0
⊢ unbot' 0 (⊥ * b) = unbot' 0 ⊥ * unbot' 0 b

case neg.coe
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b✝ b : WithBot α
hb : ¬b = 0
a✝ : α
ha : ¬↑a✝ = 0
⊢ unbot' 0 (↑a✝ * b) = unbot' 0 ↑a✝ * unbot' 0 b

tactic: induction b
state_before: case neg.coe
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b✝ b : WithBot α
hb : ¬b = 0
a✝ : α
ha : ¬↑a✝ = 0
⊢ unbot' 0 (↑a✝ * b) = unbot' 0 ↑a✝ * unbot' 0 b
state_after: case neg.coe.bot
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b : WithBot α
a✝ : α
ha : ¬↑a✝ = 0
hb : ¬⊥ = 0
⊢ unbot' 0 (↑a✝ * ⊥) = unbot' 0 ↑a✝ * unbot' 0 ⊥

case neg.coe.coe
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b : WithBot α
a✝¹ : α
ha : ¬↑a✝¹ = 0
a✝ : α
hb : ¬↑a✝ = 0
⊢ unbot' 0 (↑a✝¹ * ↑a✝) = unbot' 0 ↑a✝¹ * unbot' 0 ↑a✝

tactic: rw [← coe_mul, unbot'_coe, unbot'_coe, unbot'_coe]
state_before: case neg.coe.coe
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b : WithBot α
a✝¹ : α
ha : ¬↑a✝¹ = 0
a✝ : α
hb : ¬↑a✝ = 0
⊢ unbot' 0 (↑a✝¹ * ↑a✝) = unbot' 0 ↑a✝¹ * unbot' 0 ↑a✝
state_after: no goals

tactic: rw [ha, zero_mul, ← coe_zero, unbot'_coe, zero_mul]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : a = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b
state_after: no goals

tactic: rw [hb, mul_zero, ← coe_zero, unbot'_coe, mul_zero]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b✝ a b : WithBot α
ha : ¬a = 0
hb : b = 0
⊢ unbot' 0 (a * b) = unbot' 0 a * unbot' 0 b
state_after: no goals

tactic: rw [bot_mul hb, unbot'_bot, zero_mul]
state_before: case neg.bot
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b✝ b : WithBot α
hb : ¬b = 0
ha : ¬⊥ = 0
⊢ unbot' 0 (⊥ * b) = unbot' 0 ⊥ * unbot' 0 b
state_after: no goals

tactic: rw [mul_bot ha, unbot'_bot, mul_zero]
state_before: case neg.coe.bot
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a b : WithBot α
a✝ : α
ha : ¬↑a✝ = 0
hb : ¬⊥ = 0
⊢ unbot' 0 (↑a✝ * ⊥) = unbot' 0 ↑a✝ * unbot' 0 ⊥
state_after: no goals