Add

Theorems about addition and opposite in ring-like structures.
There is also a notion of subtraction, which can be either:
  • addition of the opposite (a+(-b)) or
  • partial subtraction (with the property a+b-b=a).
See the module RingLike.Core for the general description of the ring-like library.
In general, it is not necessary to import the present module. The normal usage is to do:
    Require Import RingLike.Core.
which imports the present module and some other ones.

From Stdlib Require Import Utf8 Arith.
Require Import Structures.

Section a.

Context {T : Type}.
Context {ro : ring_like_op T}.
Context {rp : ring_like_prop T}.

Theorem rngl_add_0_r : a, (a + 0 = a)%L.

Theorem rngl_add_opp_l :
  rngl_has_opp T = true
   a b, (- a + b)%L = (b - a)%L.

Theorem rngl_add_opp_r :
  rngl_has_opp T = true
   a b, (a + - b)%L = (a - b)%L.

Theorem rngl_add_opp_diag_l :
  rngl_has_opp T = true
   x, (- x + x = 0)%L.

Theorem rngl_sub_diag :
  rngl_has_opp_or_psub T = true
   a, (a - a = 0)%L.

Theorem rngl_psub_diag :
  rngl_has_opp_or_psub T = true
   a, rngl_psub a a = 0%L.

Theorem rngl_sub_add :
  rngl_has_opp T = true
   a b, (a - b + b = a)%L.

Theorem rngl_add_sub :
  rngl_has_opp_or_psub T = true
   a b, (a + b - b = a)%L.

Theorem rngl_add_cancel_l :
  rngl_has_opp_or_psub T = true
   a b c, (a + b = a + c)%L (b = c)%L.

Theorem rngl_add_cancel_r :
  rngl_has_opp_or_psub T = true
   a b c, (a + c = b + c)%L (a = b)%L.

Theorem rngl_add_move_l :
  rngl_has_opp T = true
   a b c, (a + b)%L = c b = (c - a)%L.
Theorem rngl_add_move_r :
  rngl_has_opp T = true
   a b c, (a + b)%L = c a = (c - b)%L.

Theorem rngl_sub_move_l :
  rngl_has_opp T = true
   a b c, (a - b)%L = c b = (a - c)%L.
Theorem rngl_sub_move_r :
  rngl_has_opp T = true
   a b c, (a - b)%L = c a = (c + b)%L.
Theorem rngl_add_sub_eq_l :
  rngl_has_opp_or_psub T = true
   a b c, (a + b = c c - a = b)%L.

Theorem rngl_add_sub_eq_r :
  rngl_has_opp_or_psub T = true
    a b c, (a + b = c c - b = a)%L.

Theorem rngl_sub_compat_l : a b c,
  a = b (a - c = b - c)%L.

Theorem rngl_add_move_0_l :
  rngl_has_opp T = true
   a b, (a + b = 0)%L (b = - a)%L.
Theorem rngl_add_move_0_r :
  rngl_has_opp T = true
   a b, (a + b = 0)%L (a = - b)%L.

Theorem rngl_add_compat_r : a b c,
  (a = b)%L (a + c = b + c)%L.

Theorem rngl_sub_move_0_r :
  rngl_has_opp T = true
   a b : T, (a - b)%L = 0%L a = b.
Theorem rngl_opp_0 : rngl_has_opp T = true (- 0 = 0)%L.

Theorem rngl_psub_0_r :
  rngl_has_psub T = true
   a, rngl_psub a 0%L = a.

Theorem rngl_sub_0_l :
  rngl_has_opp T = true
   a, (0 - a = - a)%L.

Theorem rngl_sub_0_r :
  rngl_has_opp_or_psub T = true
   a, (a - 0 = a)%L.

Theorem rngl_opp_add_distr :
  rngl_has_opp T = true
   a b, (- (a + b) = - a - b)%L.

Theorem rngl_opp_sub_swap :
  rngl_has_opp T = true
   a b, (- a - b = - b - a)%L.

Theorem rngl_add_add_swap : a b c, (a + b + c = a + c + b)%L.

Theorem rngl_add_add_add_swap :
   a b c d, ((a + b) + (c + d) = (a + c) + (b + d))%L.

Theorem rngl_sub_sub_swap :
  rngl_has_opp T = true
   a b c, (a - b - c = a - c - b)%L.

Theorem rngl_add_compat_l : a b c,
  (a = b)%L (c + a = c + b)%L.

Theorem rngl_add_sub_assoc :
  rngl_has_opp T = true
   a b c, (a + (b - c) = a + b - c)%L.

Theorem rngl_add_sub_swap :
  rngl_has_opp T = true
   a b c, (a + b - c = a - c + b)%L.

Theorem rngl_add_sub_simpl_l :
  rngl_has_opp_or_psub T = true
   a b c : T, (a + b - (a + c) = b - c)%L.

Theorem rngl_opp_involutive :
  rngl_has_opp T = true
   x, (- - x)%L = x.

Theorem rngl_sub_opp_r :
  rngl_has_opp T = true
   a b, (a - - b = a + b)%L.

Theorem rngl_opp_inj :
  rngl_has_opp T = true
   a b, (- a = - b)%L a = b.

Theorem rngl_sub_cancel_l :
  rngl_has_opp T = true
   a b c, (a - b)%L = (a - c)%L b = c.

Theorem rngl_opp_sub_distr :
  rngl_has_opp T = true
   a b, (- (a - b) = b - a)%L.

Theorem rngl_sub_add_distr :
  rngl_has_opp_or_psub T = true
   a b c, (a - (b + c) = a - b - c)%L.

Theorem rngl_sub_sub_distr :
  rngl_has_opp T = true
   a b c, (a - (b - c) = a - b + c)%L.

Theorem rngl_mul_nat_add_r : a m n,
  rngl_mul_nat a (m + n) = (rngl_mul_nat a m + rngl_mul_nat a n)%L.

Theorem rngl_of_nat_add : m n,
  rngl_of_nat (m + n) = (rngl_of_nat m + rngl_of_nat n)%L.

Theorem rngl_of_nat_sub :
  rngl_has_opp_or_psub T = true
   m n, n m rngl_of_nat (m - n) = (rngl_of_nat m - rngl_of_nat n)%L.

Theorem rngl_of_nat_1 : rngl_of_nat 1 = 1%L.

Theorem rngl_of_nat_2 : rngl_of_nat 2 = 2%L.

Theorem rngl_of_nat_3 : rngl_of_nat 3 = 3%L.

Theorem rngl_mul_nat_succ :
   a n, rngl_mul_nat a (S n) = (a + rngl_mul_nat a n)%L.

Theorem rngl_of_nat_succ :
   n, rngl_of_nat (S n) = (1 + rngl_of_nat n)%L.

Theorem rngl_abs_0 :
  rngl_has_opp T = true
   0 = 0%L.

Theorem eq_rngl_abs_0 :
  rngl_has_opp T = true
   a, rngl_abs a = 0%L a = 0%L.

Theorem rngl_add_opp_diag_r :
  rngl_has_opp T = true
   x : T, (x + - x)%L = 0%L.

Arguments rngl_mul_nat {T ro} a%_L n%_nat.

Theorem rngl_of_nat_0 : rngl_of_nat 0 = 0%L.

Theorem fold_rngl_mul_nat :
   a n, List.fold_right rngl_add 0%L (List.repeat a n)%L = rngl_mul_nat a n.

Theorem rngl_characteristic_0 :
  rngl_characteristic T = 0
   i : nat, rngl_of_nat (S i) 0%L.

Theorem rngl_characteristic_non_0 :
  rngl_characteristic T 0
  ( i : nat, 0 < i < rngl_characteristic T rngl_of_nat i 0%L)
  rngl_of_nat (rngl_characteristic T) = 0%L.

Theorem rngl_1_neq_0 : rngl_characteristic T 1 (1 0)%L.

Theorem rngl_1_neq_0_iff : rngl_characteristic T 1 (1 0)%L.

Theorem eq_rngl_of_nat_0 :
  rngl_characteristic T = 0
   i, rngl_of_nat i = 0%L i = 0.

End a.

Arguments rngl_abs {T ro} a%_L.
Arguments rngl_add_sub {T ro rp} Hom (a b)%_L.
Arguments rngl_add_sub_assoc {T ro rp} Hop (a b c)%_L.
Arguments rngl_add_add_swap {T ro rp} (a b c)%_L.
Arguments rngl_add_sub_swap {T ro rp} Hop (a b c)%_L.
Arguments rngl_min {T ro} (a b)%_L.
Arguments rngl_mul_nat {T ro} a%_L n%_nat.
Arguments rngl_opp_sub_swap {T ro rp} Hop (a b)%_L.
Arguments rngl_sub_add {T ro rp} Hop (a b)%_L.
Arguments rngl_sub_add_distr {T ro rp} Hos (a b c)%_L.
Arguments rngl_sub_sub_swap {T ro rp} Hop (a b c)%_L.

This page has been generated by coqdoc