Lean4
/-- A type endowed with `-` and `*` has distributive negation, if it admits an injective map that
preserves `-` and `*` to a type which has distributive negation. -/
-- -- See note [reducible non-instances]
protected abbrev hasDistribNeg (f : S → R) (hf : Injective f) [Mul R] [HasDistribNeg R] (neg : ∀ a, f (-a) = -f a)
(mul : ∀ a b, f (a * b) = f a * f b) : HasDistribNeg S :=
{ hf.involutiveNeg _ neg, ‹Mul S› with neg_mul := fun x y => hf <| by rw [neg, mul, neg, neg_mul, mul],
mul_neg := fun x y => hf <| by rw [neg, mul, neg, mul_neg, mul] }