Div
- multiplication by the inverse (ab⁻¹) or
- partial division (with the property ab/b=a).
- rngl_has_inv T = true : that inversion (x⁻¹) exists,
- rngl_mul_is_comm T = true : that the multiplication is commutative,
- rngl_characteristic T = 0 : that the characteristics is 0,
- rngl_characteristic T ≠ 1 : that the characteristics ≠ 1,
- rngl_has_opp_or_psub T = true : that opposite or partial subtraction exists,
- rngl_has_inv_or_pdiv T = true : that inversion or partial division exists.
Require Import RingLike.Core.
which imports the present module and some other ones.
Require Import Stdlib.Arith.Arith.
Require Import Utf8 Structures Add Mul.
Section a.
Context {T : Type}.
Context {ro : ring_like_op T}.
Context {rp : ring_like_prop T}.
Theorem rngl_mul_inv_diag_l :
rngl_has_inv T = true →
∀ a : T, a ≠ 0%L → (a⁻¹ × a = 1)%L.
Theorem rngl_mul_inv_diag_r :
rngl_has_inv T = true →
∀ a : T, a ≠ 0%L → (a × a⁻¹ = 1)%L.
Theorem rngl_mul_inv_r :
rngl_has_inv T = true →
∀ a b, (a × b⁻¹)%L = (a / b)%L.
Theorem rngl_div_diag :
rngl_has_inv_or_pdiv T = true →
∀ a : T, a ≠ 0%L → (a / a = 1)%L.
Theorem rngl_mul_div :
rngl_has_inv_or_pdiv T = true →
∀ a b : T, b ≠ 0%L → (a × b / b)%L = a.
Theorem rngl_mul_cancel_l :
rngl_has_inv_or_pdiv_and_comm T = true →
∀ a b c, a ≠ 0%L
→ (a × b = a × c)%L
→ b = c.
Theorem rngl_mul_cancel_r :
rngl_has_inv_or_pdiv T = true →
∀ a b c, c ≠ 0%L
→ (a × c = b × c)%L
→ a = b.
Theorem rngl_div_mul_mul_div :
rngl_mul_is_comm T = true →
rngl_has_inv T = true →
∀ a b c, (a / b × c = a × c / b)%L.
Theorem rngl_mul_div_r :
rngl_mul_is_comm T = true →
rngl_has_inv_or_pdiv T = true →
∀ a b : T, a ≠ 0%L → (a × b / a)%L = b.
Theorem rngl_div_0_l :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv T = true →
∀ a, a ≠ 0%L → (0 / a)%L = 0%L.
Theorem rngl_div_mul :
rngl_has_inv T = true →
∀ a b, b ≠ 0%L → (a / b × b)%L = a.
Theorem rngl_div_div_swap :
rngl_mul_is_comm T = true →
rngl_has_inv T = true →
∀ a b c,
(a / b / c = a / c / b)%L.
Theorem rngl_div_div_mul_mul :
rngl_mul_is_comm T = true →
rngl_has_inv T = true →
∀ a b c d,
b ≠ 0%L
→ d ≠ 0%L
→ (a / b = c / d)%L ↔ (a × d = b × c)%L.
Theorem rngl_eq_mul_0_l :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv T = true →
∀ a b, (a × b = 0)%L → b ≠ 0%L → a = 0%L.
Theorem rngl_eq_mul_0_r :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv_and_comm T = true →
∀ a b, (a × b = 0)%L → a ≠ 0%L → b = 0%L.
Theorem rngl_neq_mul_0 :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv T = true →
∀ a b, (a ≠ 0 → b ≠ 0 → a × b ≠ 0)%L.
Theorem rngl_div_add_distr_r:
rngl_has_inv T = true →
∀ a b c, ((a + b) / c)%L = (a / c + b / c)%L.
Theorem rngl_div_sub_distr_r:
rngl_has_opp T = true →
rngl_has_inv T = true →
∀ a b c, ((a - b) / c)%L = (a / c - b / c)%L.
Theorem rngl_inv_1 :
rngl_has_inv T = true →
rngl_has_opp_or_psub T = true ∨ rngl_characteristic T ≠ 1 →
(1⁻¹ = 1)%L.
Theorem rngl_div_1_l :
rngl_has_inv T = true →
∀ a, (1 / a = a⁻¹)%L.
Theorem rngl_div_1_r :
rngl_has_inv_or_pdiv T = true →
rngl_has_opp_or_psub T = true ∨ rngl_characteristic T ≠ 1 →
∀ a, (a / 1 = a)%L.
Theorem rngl_mul_div_assoc :
rngl_has_inv T = true →
∀ a b c, (a × (b / c) = a × b / c)%L.
Theorem rngl_div_compat_l :
rngl_has_inv T = true →
∀ a b c, c ≠ 0%L → (a = b)%L → (a / c = b / c)%L.
Theorem rngl_inv_if_then_else_distr : ∀ (c : bool) a b,
((if c then a else b)⁻¹ = if c then a⁻¹ else b⁻¹)%L.
Theorem rngl_mul_move_1_r :
rngl_has_inv T = true →
∀ a b : T, b ≠ 0%L → (a × b)%L = 1%L ↔ a = (b⁻¹)%L.
Theorem rngl_mul_move_l :
rngl_mul_is_comm T = true →
rngl_has_inv_or_pdiv T = true →
∀ a b c, a ≠ 0%L → (a × b)%L = c → b = (c / a)%L.
Theorem rngl_mul_move_r :
rngl_has_inv_or_pdiv T = true →
∀ a b c, b ≠ 0%L → (a × b)%L = c → a = (c / b)%L.
Theorem rngl_inv_neq_0 :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a, a ≠ 0%L → (a⁻¹ ≠ 0)%L.
Theorem rngl_inv_involutive :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ x, x ≠ 0%L → (x⁻¹⁻¹)%L = x.
Theorem rngl_inv_inj :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a b, a ≠ 0%L → b ≠ 0%L →(a⁻¹ = b⁻¹)%L → a = b.
Theorem rngl_inv_mul_distr :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a b, a ≠ 0%L → b ≠ 0%L →((a × b)⁻¹ = b⁻¹ × a⁻¹)%L.
Theorem rngl_div_div :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a b c, (b ≠ 0 → c ≠ 0 → a / b / c = a / (c × b))%L.
Theorem rngl_div_div_r :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a b c,
b ≠ 0%L
→ c ≠ 0%L
→ (a / (b / c) = a × c / b)%L.
Theorem rngl_opp_inv :
rngl_has_opp T = true →
rngl_has_inv T = true →
∀ a, a ≠ 0%L → (- a⁻¹ = (- a)⁻¹)%L.
Theorem rngl_div_mul_div :
rngl_has_inv T = true →
∀ x y z, y ≠ 0%L → ((x / y) × (y / z))%L = (x / z)%L.
Theorem eq_rngl_div_1 :
rngl_has_inv_or_pdiv T = true →
∀ a b, b ≠ 0%L → a = b → (a / b = 1)%L.
Theorem eq_rngl_add_same_0 :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv T = true →
rngl_characteristic T = 0 →
∀ a,
(a + a = 0)%L
→ a = 0%L.
Theorem rngl_pow_neq_0 :
rngl_has_opp_or_psub T = true →
rngl_has_inv_or_pdiv T = true →
∀ a n, (a ≠ 0 → a ^ n ≠ 0)%L.
Theorem rngl_squ_inv :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a, (a ≠ 0 → (a⁻¹)² = (a²)⁻¹)%L.
Theorem rngl_squ_div :
rngl_mul_is_comm T = true →
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ a b, b ≠ 0%L → (a / b)²%L = (a² / b²)%L.
Theorem rngl_div_opp_l :
rngl_has_opp T = true →
rngl_has_inv T = true →
∀ a b, (- a / b = - (a / b))%L.
Theorem rngl_div_opp_r :
rngl_has_opp T = true →
rngl_has_inv T = true →
∀ a b, b ≠ 0%L → (a / - b = - (a / b))%L.
Theorem rngl_div_opp_opp :
rngl_has_opp T = true →
rngl_has_inv T = true →
∀ a b, (b ≠ 0 → - a / - b = a / b)%L.
Theorem rngl_inv_pow :
rngl_has_opp_or_psub T = true →
rngl_has_inv T = true →
∀ x n, x ≠ 0%L → ((x ^ n)⁻¹ = x⁻¹ ^ n)%L.
End a.
For the Rocq tactic "ring"
Require Import Stdlib.Ring.
Section a.
Context {T : Type}.
Context {ro : ring_like_op T}.
Context {rp : ring_like_prop T}.
Context {Hic : rngl_mul_is_comm T = true}.
Context {Hop : rngl_has_opp T = true}.
Add Ring rngl_ring : (rngl_ring_theory Hic Hop).
Example a2_b2 : ∀ a b, ((a + b) * (a - b) = a * a - b * b)%L. Proof. intros. ring_simplify. (* just to see what happens *) easy. Qed.
Require Import Stdlib.setoid_ring.Ring_theory.
Require Import Stdlib.setoid_ring.Field_theory.
Section a.
Context {T : Type}.
Context {ro : ring_like_op T}.
Context {rp : ring_like_prop T}.
Context (Hic : rngl_mul_is_comm T = true).
Context (Hop : rngl_has_opp T = true).
Definition rngl_ring_theory
: ring_theory 0%L 1%L rngl_add rngl_mul rngl_sub rngl_opp eq :=
{| Radd_0_l := rngl_add_0_l;
Radd_comm := rngl_add_comm;
Radd_assoc := rngl_add_assoc;
Rmul_1_l := rngl_mul_1_l;
Rmul_comm := rngl_mul_comm Hic;
Rmul_assoc := rngl_mul_assoc;
Rdistr_l := rngl_mul_add_distr_r;
Rsub_def x y := eq_sym (rngl_add_opp_r Hop x y);
Ropp_def := rngl_add_opp_diag_r Hop |}.
Context (Hiv : rngl_has_inv T = true).
Context (Hc1 : rngl_characteristic T ≠ 1).
Definition rngl_field_theory :
field_theory 0%L 1%L rngl_add rngl_mul rngl_sub rngl_opp
rngl_div rngl_inv eq :=
{| F_R := rngl_ring_theory;
F_1_neq_0 := rngl_1_neq_0 Hc1;
Fdiv_def := rngl_div_eq_inv_r Hiv;
Finv_l := rngl_mul_inv_diag_l Hiv |}.
Record charac_0_field :=
{ cf_mul_is_comm : rngl_mul_is_comm T = true;
cf_has_opp : rngl_has_opp T = true;
cf_has_inv : rngl_has_inv T = true;
cf_has_eq_dec : rngl_has_eq_dec T = true;
cf_characteristic : rngl_characteristic T = 0 }.
End a.
Arguments rngl_div_add_distr_r {T ro rp} Hiv (a b c)%_L.
Arguments rngl_div_diag {T ro rp} Hiq a%_L.
Arguments rngl_div_mul {T ro rp} Hiv (a b)%_L.
Arguments rngl_div_opp_opp {T ro rp} Hop Hiv (a b)%_L.
Arguments rngl_div_1_l {T ro rp} Hiv a%_L.
Arguments rngl_mul_cancel_r {T ro rp} Hi1 (a b c)%_L.
Arguments rngl_mul_div {T ro rp} Hiv (a b)%_L.
Arguments rngl_mul_inv_r {T ro} Hiv (a b)%_L.
Arguments charac_0_field T%_type {ro rp}.
This page has been generated by coqdoc