# Control.Algebra.Laws

inverseDistributesOverGroupOp : VerifiedAbelianGroup t => (l : t) -> (r : t) -> inverse (l <+> r) = inverse l <+> inverse r

  A proof that -(x + y) = -x - y in any verified abelian group.

inverseNeutralIsNeutral : VerifiedGroup t => inverse (the t neutral) = neutral

  A prof that -0 = 0 in any verified group.

inverseSquaredIsIdentity : VerifiedGroup t => (x : t) -> inverse (inverse x) = x

  A proof that -(-x) = x in any verified group.

multInverseInversesL : VerifiedRingWithUnity t => (l : t) -> (r : t) -> inverse l <.> r = inverse (l <.> r)

  A proof that inverse operator can be extracted before multiplication
  (-x)y = -(xy)

multInverseInversesR : VerifiedRingWithUnity t => (l : t) -> (r : t) -> l <.> inverse r = inverse (l <.> r)

  A proof that inverse operator can be extracted before multiplication
  x(-y) = -(xy)

multNegativeByNegativeIsPositive : VerifiedRingWithUnity t => (l : t) -> (r : t) -> inverse l <.> inverse r = l <.> r

  A proof that multiplication of inverses is the same as multiplication of original
  elements. (-x)(-y) = xy

multNeutralAbsorbingL : VerifiedRingWithUnity t => (r : t) -> neutral <.> r = neutral

  A proof that anything multiplied by zero yields zero back.

multNeutralAbsorbingR : VerifiedRingWithUnity t => (l : t) -> l <.> neutral = neutral

  A proof that anything multiplied by zero yields zero back.