Module docstring
{"# Opposites of groups with zero "}
{"# Opposites of groups with zero "}
MulOpposite.instMulZeroClass
      instance
     [MulZeroClass α] : MulZeroClass αᵐᵒᵖ
        instance instMulZeroClass [MulZeroClass α] : MulZeroClass αᵐᵒᵖ where
  zero_mul _ := unop_injective <| mul_zero _
  mul_zero _ := unop_injective <| zero_mul _
        MulOpposite.instMulZeroOneClass
      instance
     [MulZeroOneClass α] : MulZeroOneClass αᵐᵒᵖ
        instance instMulZeroOneClass [MulZeroOneClass α] : MulZeroOneClass αᵐᵒᵖ where
  __ := instMulOneClass
  __ := instMulZeroClass
        MulOpposite.instSemigroupWithZero
      instance
     [SemigroupWithZero α] : SemigroupWithZero αᵐᵒᵖ
        instance instSemigroupWithZero [SemigroupWithZero α] : SemigroupWithZero αᵐᵒᵖ where
  __ := instSemigroup
  __ := instMulZeroClass
        MulOpposite.instMonoidWithZero
      instance
     [MonoidWithZero α] : MonoidWithZero αᵐᵒᵖ
        instance instMonoidWithZero [MonoidWithZero α] : MonoidWithZero αᵐᵒᵖ where
  __ := instMonoid
  __ := instMulZeroOneClass
        MulOpposite.instGroupWithZero
      instance
     [GroupWithZero α] : GroupWithZero αᵐᵒᵖ
        instance instGroupWithZero [GroupWithZero α] : GroupWithZero αᵐᵒᵖ where
  __ := instMonoidWithZero
  __ := instNontrivial
  __ := instDivInvMonoid
  mul_inv_cancel _ hx := unop_injective <| inv_mul_cancel₀ <| unop_injective.ne hx
  inv_zero := unop_injective inv_zero
        MulOpposite.instNoZeroDivisors
      instance
     [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisors αᵐᵒᵖ
        instance instNoZeroDivisors [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisors αᵐᵒᵖ where
  eq_zero_or_eq_zero_of_mul_eq_zero (H : op (_ * _) = op (0 : α)) :=
      Or.casesOn (eq_zero_or_eq_zero_of_mul_eq_zero <| op_injective H)
        (fun hy => Or.inr <| unop_injective <| hy) fun hx => Or.inl <| unop_injective <| hx
        AddOpposite.instMulZeroClass
      instance
     [MulZeroClass α] : MulZeroClass αᵃᵒᵖ
        instance instMulZeroClass [MulZeroClass α] : MulZeroClass αᵃᵒᵖ where
  zero_mul _ := unop_injective <| zero_mul _
  mul_zero _ := unop_injective <| mul_zero _
        AddOpposite.instMulZeroOneClass
      instance
     [MulZeroOneClass α] : MulZeroOneClass αᵃᵒᵖ
        instance instMulZeroOneClass [MulZeroOneClass α] : MulZeroOneClass αᵃᵒᵖ where
  __ := instMulOneClass
  __ := instMulZeroClass
        AddOpposite.instSemigroupWithZero
      instance
     [SemigroupWithZero α] : SemigroupWithZero αᵃᵒᵖ
        instance instSemigroupWithZero [SemigroupWithZero α] : SemigroupWithZero αᵃᵒᵖ where
  __ := instSemigroup
  __ := instMulZeroClass
        AddOpposite.instMonoidWithZero
      instance
     [MonoidWithZero α] : MonoidWithZero αᵃᵒᵖ
        instance instMonoidWithZero [MonoidWithZero α] : MonoidWithZero αᵃᵒᵖ where
  __ := instMonoid
  __ := instMulZeroOneClass
        AddOpposite.instNoZeroDivisors
      instance
     [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisors αᵃᵒᵖ
        instance instNoZeroDivisors [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisors αᵃᵒᵖ where
  eq_zero_or_eq_zero_of_mul_eq_zero (H : op (_ * _) = op (0 : α)) :=
    Or.imp (fun hx => unop_injective hx) (fun hy => unop_injective hy)
    (@eq_zero_or_eq_zero_of_mul_eq_zero α _ _ _ _ _ <| op_injective H)
        AddOpposite.instGroupWithZero
      instance
     [GroupWithZero α] : GroupWithZero αᵃᵒᵖ
        instance instGroupWithZero [GroupWithZero α] : GroupWithZero αᵃᵒᵖ where
  __ := instMonoidWithZero
  __ := instNontrivial
  __ := instDivInvMonoid
  mul_inv_cancel _ hx := unop_injective <| mul_inv_cancel₀ <| unop_injective.ne hx
  inv_zero := unop_injective inv_zero