have : SameSign a b ∨ NonzeroWithSign ab (-1) := match nwsac with
| Or.inl (nwsa : NonzeroWithSign a 1) =>
  match nwsbc with
  | Or.inl (nwsb : NonzeroWithSign b 1) =>
    Or.inl (SameSign.mk nwsa nwsb)
  | Or.inr (nwsb : NonzeroWithSign b (-1)) =>
    have : NonzeroWithSign ab (1 * -1) :=
      mul_preserves_nonzeroWithSign nwsa nwsb
    have : NonzeroWithSign ab (-1) :=
      NonzeroWithSign.subst_sign AA.identL ‹NonzeroWithSign ab (1 * -1)›
    Or.inr ‹NonzeroWithSign ab (-1)›
| Or.inr (nwsa : NonzeroWithSign a (-1)) =>
  match nwsbc with
  | Or.inl (nwsb : NonzeroWithSign b 1) =>
    have : NonzeroWithSign ab (-1 * 1) :=
      mul_preserves_nonzeroWithSign nwsa nwsb
    have : NonzeroWithSign ab (-1) :=
      NonzeroWithSign.subst_sign AA.identR ‹NonzeroWithSign ab (-1 * 1)›
    Or.inr ‹NonzeroWithSign ab (-1)›
  | Or.inr (nwsb : NonzeroWithSign b (-1)) =>
    Or.inl (SameSign.mk nwsa nwsb)
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a b : ℤ
ab : ℤ := a * b
x✝ : Positive ab
this✝¹ : Nonzero ab
left✝ : Nonzero a
right✝ : Nonzero b
sa : ℤ
sqrt1✝¹ : Sqrt1 sa
nwsa : NonzeroWithSign a sa
sb : ℤ
sqrt1✝ : Sqrt1 sb
nwsb : NonzeroWithSign b sb
this✝ : NonzeroWithSign a sa
this : NonzeroWithSign b sb
nwsac : NonzeroWithSign a 1 ∨ NonzeroWithSign a (-1)
nwsbc : NonzeroWithSign b 1 ∨ NonzeroWithSign b (-1)
⊢ SameSign a b
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a b : ℤ
ab : ℤ := a * b
x✝ : Positive ab
this✝² : Nonzero ab
left✝ : Nonzero a
right✝ : Nonzero b
sa : ℤ
sqrt1✝¹ : Sqrt1 sa
nwsa : NonzeroWithSign a sa
sb : ℤ
sqrt1✝ : Sqrt1 sb
nwsb : NonzeroWithSign b sb
this✝¹ : NonzeroWithSign a sa
this✝ : NonzeroWithSign b sb
nwsac : NonzeroWithSign a 1 ∨ NonzeroWithSign a (-1)
nwsbc : NonzeroWithSign b 1 ∨ NonzeroWithSign b (-1)
this : SameSign a b ∨ NonzeroWithSign ab (-1)
⊢ SameSign a b