RealLike

Specific properties of real numbers: existence of nth roots.

From Stdlib Require Import Utf8.

Require Import Core.

Class real_like_prop T {ro : ring_like_op T} {rp : ring_like_prop T} :=
  { rl_nth_root : nat T T;
    rl_nth_root_pow : n a, (0 a rl_nth_root n a ^ n = a)%L;
    rl_nth_root_mul :
       n a b, (0 a)%L (0 b)%L
      (rl_nth_root n (a × b) = rl_nth_root n a × rl_nth_root n b)%L;
    rl_nth_root_inv :
       n a, (0 < a rl_nth_root n a⁻¹ = (rl_nth_root n a)⁻¹)%L;
    rl_sqrt_nonneg : a, (0 a 0 rl_nth_root 2 a)%L }.

Section a.

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

Definition rl_sqrt a := rl_nth_root 2 a.

End a.

Arguments rl_sqrt {T ro rp rl} a%_L.
Notation "'√' a" := (rl_sqrt a) (at level 2, format "√ a").

Section a.

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

Theorem rngl_squ_sqrt :
   a, (0 a)%L rngl_squ (a) = a.

Theorem rngl_abs_sqrt :
  rngl_has_opp T = true
  rngl_is_ordered T = true
   a, (0 a)%L rngl_abs (a) = (a)%L.

Theorem rl_sqrt_mul :
   a b,
  (0 a)%L
   (0 b)%L
   rl_sqrt (a × b)%L = (rl_sqrt a × rl_sqrt b)%L.

Theorem rl_sqrt_div :
  rngl_has_opp T = true
  rngl_has_inv T = true
  rngl_is_ordered T = true
   a b, (0 a)%L (0 < b)%L (√(a / b) = a / b)%L.

Theorem rl_sqrt_squ :
  rngl_has_opp T = true
  rngl_is_ordered T = true
   a, (a²)%L = rngl_abs a.
Theorem rl_sqrt_0 :
  rngl_has_opp T = true
  rngl_is_ordered T = true
  (rngl_is_integral_domain T || rngl_has_inv_or_pdiv T)%bool = true
  rl_sqrt 0%L = 0%L.

Theorem eq_rl_sqrt_0 :
  rngl_has_opp_or_psub T = true
   a, (0 a)%L rl_sqrt a = 0%L a = 0%L.

Definition rl_modl x y := (√(x² + y²))%L.

Theorem fold_rl_modl : x y, √(x² + y²) = rl_modl x y.

Theorem rl_modl_add_le :
  rngl_mul_is_comm T = true
  rngl_has_opp T = true
  rngl_has_inv T = true
  rngl_is_ordered T = true
   a b c d, (rl_modl (a + c) (b + d) rl_modl a b + rl_modl c d)%L.

Theorem euclidean_distance_triangular :
  rngl_mul_is_comm T = true
  rngl_has_opp T = true
  rngl_has_inv T = true
  rngl_is_ordered T = true
   x1 y1 x2 y2 x3 y3,
  (rl_modl (x3 - x1) (y3 - y1)
    rl_modl (x2 - x1) (y2 - y1) + rl_modl (x3 - x2) (y3 - y2))%L.

Theorem rl_sqrt_le_rl_sqrt :
  rngl_has_opp T = true
  rngl_has_inv_or_pdiv T = true
  rngl_is_ordered T = true
   a b,
  (0 a)%L
   (a b)%L
   ( a b)%L.

Theorem rl_sqrt_lt_rl_sqrt :
  rngl_is_ordered T = true
   a b,
  (0 a)%L
   (a < b)%L
   ( a < b)%L.

Theorem rl_sqrt_pos :
  rngl_has_opp_or_psub T = true
  rngl_is_ordered T = true
   a, (0 < a)%L (0 < a)%L.

Theorem rl_sqrt_1 :
  rngl_has_opp T = true
  rngl_has_inv_or_pdiv T = true
  rngl_is_ordered T = true
  rl_sqrt 1%L = 1%L.

End a.

Arguments rl_modl {T ro rp rl} (x y)%_L.

This page has been generated by coqdoc