intros f p q r s x y H.
destruct H; rewrite H.
rewrite plus_0_l.
unfold partial_derive.
simpl.
rewrite -Derive_n_comp.
now apply Derive_n_ext.
rewrite plus_0_r.
unfold partial_derive.
simpl.
apply Derive_n_ext.
intros y0.
rewrite -Derive_n_comp.
now apply Derive_n_ext.
Qed.
(** * Iterated differential *)
Fixpoint ex_diff_n f n x y :=
continuity_2d_pt f x y /\
match n with
| O => True
| S n =>
ex_derive (fun z => f z y) x /\
ex_derive (fun z => f x z) y /\
ex_diff_n (fun u v => Derive (fun z => f z v) u) n x y /\
ex_diff_n (fun u v => Derive (fun z => f u z) v) n x y
end.

(* Specifications: *)
Lemma ex_diff_n_ext_loc: forall f g n x y,
locally_2d (fun u v =>  f u v = g u v) x y
-> ex_diff_n f n x y -> ex_diff_n g n x y.
Lemma ex_diff_n_m :
forall n m, (m <= n)%nat -> forall f x y, ex_diff_n f n x y -> ex_diff_n f m x y.
Lemma ex_diff_n_deriv_aux1: forall f n x y,
ex_diff_n f (S n) x y -> ex_diff_n (fun u v => Derive (fun z => f z v) u) n x y.
Lemma ex_diff_n_deriv_aux2: forall f n x y,
ex_diff_n f (S n) x y -> ex_diff_n (fun u v => Derive (fun z => f u z) v) n x y.
Lemma ex_diff_n_deriv: forall n p q, (p+q <= n)%nat -> forall f x y,
ex_diff_n f n x y-> ex_diff_n (partial_derive p q f) (n -(p+q)) x y.