Module Type NZSqrtProp
(Import A : NZOrdAxiomsSig')
(Import B : NZSqrt' A)
(Import C : NZMulOrderProp A).
Local Notation "a ²" := (a*a) (at level 5, no associativity, format "a ²").
(** First, sqrt is non-negative *)
(** The spec of sqrt indeed determines it *)
(** Hence sqrt is a morphism *)
Instance sqrt_wd : Proper (eq==>eq) sqrt.
(** An alternate specification *)
(** Sqrt is exact on squares *)
(** Sqrt and predecessors of squares *)
(** Sqrt is a monotone function (but not a strict one) *)
(** No reverse result for <=, consider for instance √2 <= √1 *)
(** When left side is a square, we have an equivalence for <= *)

Lemma sqrt_le_square : forall a b, 0<=a -> 0<=b -> (b²<=a <-> b <= √a).