Theorem: FunctionField.InftyValuation.map_mul'
File: Mathlib/NumberTheory/FunctionField.lean

tactic: rw [inftyValuationDef, inftyValuationDef, inftyValuationDef]
state_before: Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
⊢ inftyValuationDef Fq (x * y) = inftyValuationDef Fq x * inftyValuationDef Fq y
state_after: Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)

tactic: by_cases hx : x = 0
state_before: Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)
state_after: case pos
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : x = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)

case neg
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)

tactic: rw [hx, zero_mul, if_pos (Eq.refl _), zero_mul]
state_before: case pos
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : x = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)
state_after: no goals

tactic: by_cases hy : y = 0
state_before: case neg
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)
state_after: case pos
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
hy : y = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)

case neg
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
hy : ¬y = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)

tactic: rw [hy, mul_zero, if_pos (Eq.refl _), mul_zero]
state_before: case pos
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
hy : y = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)
state_after: no goals

tactic: rw [if_neg hx, if_neg hy, if_neg (mul_ne_zero hx hy), ← WithZero.coe_mul, WithZero.coe_inj,
  ← ofAdd_add, RatFunc.intDegree_mul hx hy]
state_before: case neg
Fq F : Type
inst✝² : Field Fq
inst✝¹ : Field F
inst✝ : DecidableEq (RatFunc Fq)
x y : RatFunc Fq
hx : ¬x = 0
hy : ¬y = 0
⊢ (if x * y = 0 then 0 else ↑(Multiplicative.ofAdd (x * y).intDegree)) =
    (if x = 0 then 0 else ↑(Multiplicative.ofAdd x.intDegree)) *
      if y = 0 then 0 else ↑(Multiplicative.ofAdd y.intDegree)
state_after: no goals