apply generic_recursor
⊢ ∀ (c a b : ↑N0), mul (mul (a, b), c) = mul (a, mul (b, c))
case hz

⊢ ∀ (a b : ↑N0), mul (mul (a, b), z) = mul (a, mul (b, z))

case hs

⊢ ∀ (n : ↑N0),
    (∀ (a b : ↑N0), mul (mul (a, b), n) = mul (a, mul (b, n))) →
      ∀ (a b : ↑N0), mul (mul (a, b), S n) = mul (a, mul (b, S n))