(** * Partial derivatives *)

Definition partial_derive (m k : nat) (f : R -> R -> R) : R -> R -> R :=
  fun x y => Derive_n (fun t => Derive_n (fun z => f t z) k y) m x.Definition differential (p : nat) (f : R -> R -> R) (x y dx dy : R) : R :=
  sum_f_R0
    (fun m =>
      C p m *
      partial_derive m (p - m)%nat f x y *
      dx ^ m * dy ^ (p - m)%nat)
    p.Definition DL_pol (n : nat) (f : R -> R -> R) (x y dx dy : R) : R :=
  sum_f_R0
    (fun p =>
      differential p f x y dx dy / INR (fact p))
    n.

Lemma Schwarz : forall (f : R -> R -> R) x y, locally_2d (fun u v => ex_derive (fun z : R => f z v) u /\ ex_derive (fun z : R => f u z) v /\ ex_derive (fun z : R => Derive (fun t => f z t) v) u /\ ex_derive (fun z : R => Derive (fun t => f t z) u) v) x y -> continuity_2d_pt (fun u v => Derive (fun z => Derive (fun t => f z t) v) u) x y -> continuity_2d_pt (fun u v => Derive (fun z => Derive (fun t => f t z) u) v) x y -> Derive (fun z => Derive (fun t => f z t) y) x = Derive (fun z => Derive (fun t => f t z) x) y.