Coqelicot在Coq上的偏微分

Coqelicot在Coq上的偏微分,coq,differentiation,Coq,Differentiation,我想部分区分函数,它需要n个参数来表示任意自然数n。我希望只区分一次武断的论点,而不是其他论点 Require Import Reals. Open Scope R_scope. Definition myFunc (x y z:R) :R:= x^2 + y^3 + z^4. 当我用y来区分myFunc时,我期望函数3*(y^2) 我知道你在哪里 partial\u派生可以部分区分f:R→ R→ R,但不能用于任意数量的参数 我考虑过使用依赖类型列表器 Inductive listR :

我想部分区分函数,它需要n个参数来表示任意自然数n。我希望只区分一次武断的论点,而不是其他论点

Require Import Reals.
Open Scope R_scope.

Definition myFunc (x y z:R) :R:=
 x^2 + y^3 + z^4.
当我用y来区分
myFunc
时,我期望函数
3*(y^2)

我知道你在哪里

partial\u派生
可以部分区分
f:R→ R→ R
,但不能用于任意数量的参数

我考虑过使用依赖类型列表器

Inductive listR :nat -> Type:=
|RO : Euc 0
|Rn : forall {n}, R -> listR n -> listR (S n).

Notation "[ ]" := RO.
Notation "[ r1 , .. , r2 ]" := (Rn r1 .. ( Rn r2 RO ) .. ).
Infix ":::" := Rn (at level 60, right associativity).

Fixpoint partial_derive_nth {n} (k:nat) (f : listR n -> R) (e:listR n): listR n -> R:=
k
指定要区分的参数编号。 我们不能像部分派生那样定义部分派生,因为我们不能在递归中指定
fun
的参数名称


请告诉我如何部分区分具有任意数量参数的函数。

对于函数
myFunc
,可以这样编写偏导数:

Definition pdiv2_myFunc (x y z : R) :=
 Derive (fun y => myFunc x y z) y.
然后,您可以证明它具有您对
x
y
z
的任何选择所期望的值。由于
Coquelicot
中提供的策略,大部分证明都可以自动完成

Lemma pdiv2_myFunc_value (x y z : R) :
   pdiv2_myFunc x y z = 3 * y ^ 2.
Proof.
unfold pdiv2_myFunc, myFunc.  
apply is_derive_unique.
auto_derive; auto; ring.
Qed.
我有点惊讶,自动策略
auto\u-deriver
没有处理
deriver\uui=\ ucode>形式的目标,所以我必须应用定理
是唯一的

Lemma pdiv2_myFunc_value (x y z : R) :
   pdiv2_myFunc x y z = 3 * y ^ 2.
Proof.
unfold pdiv2_myFunc, myFunc.  
apply is_derive_unique.
auto_derive; auto; ring.
Qed.