(*****************************************************)
(** * Derivative's definition using Landau's kernel  *)
(*****************************************************)
Definition derivable_pt_lim f (x l:R) : Prop :=
forall eps:R,
0 < eps ->
exists delta : posreal,
(forall h:R,
h <> 0 -> Rabs h < delta -> Rabs ((f (x + h) - f x) / h - l) < eps).
Definition derivable_pt_abs f (x l:R) : Prop := derivable_pt_lim f x l.
Definition derivable_pt f (x:R) := { l:R | derivable_pt_abs f x l }.
Definition derivable f := forall x:R, derivable_pt f x.
Definition derive_pt f (x:R) (pr:derivable_pt f x) := proj1_sig pr.
Definition derive f (pr:derivable f) (x:R) := derive_pt f x (pr x).
Arguments derivable_pt_lim f%_F x%_R l.
Arguments derivable_pt_abs f%_F (x l)%_R.
Arguments derivable_pt f%_F x%_R.
Arguments derivable f%_F.
Arguments derive_pt f%_F x%_R pr.
Arguments derive f%_F pr x.
Definition antiderivative f (g:R -> R) (a b:R) : Prop :=
(forall x:R,
a <= x <= b ->  exists pr : derivable_pt g x, f x = derive_pt g x pr) /\
a <= b.
(**************************************)
(** * Class of differential functions *)
(**************************************)
Record Differential : Type := mkDifferential
{d1 :> R -> R; cond_diff : derivable d1}.
Record Differential_D2 : Type := mkDifferential_D2
{d2 :> R -> R;
cond_D1 : derivable d2;
cond_D2 : derivable (derive d2 cond_D1)}.

(**********************************************************************)
(** * Equivalence of this definition with the one using limit concept *)
(**********************************************************************)
Lemma derive_pt_D_in :
forall f (df:R -> R) (x:R) (pr:derivable_pt f x),
D_in f df no_cond x <-> derive_pt f x pr = df x.