在我的问题here之后,我有几个函数具有不同的参数类型,并在其上定义了归纳类型formula
。无论如何在Inductive formula
中使用compute_formula
。我这样做是通过减少必须在证明中处理的构造函数的数量来简化证明。谢谢。
Fixpoint add (n:type1) (m:type2): type3 :=
match n with
(*body for add*)
end.
Fixpoint mul (n:type1) (m:type4): type5 :=
match n with
(*body for mul*)
end.
Inductive formula : Type :=
| Formula {A B}: type1-> A -> (type1->A->B) -> formula.
(* How should I write this *)
Definition compute_formula {A B} (f: formula) (extraArg:A) : B :=
match f with
|Formula {A B} part1 part2 part3=>
if (A isof type2 && B isof type3) then add part1 part2+extraArg
if (A isof type4 && B isof type5) then mul part1 part2+extraArg
end.
答案 0 :(得分:2)
您希望compute_formula
的输出类型是什么?编写签名的方式,无论B
是什么,函数都必须能够计算B
的元素。由于这显然是不可能的(B
是Empty
会怎样?),我将向您展示另一种方法。
想法是使用formula
来获取输出类型。
Definition output_type (f: formula) :=
match f with
| @Formula _ B _ _ _ => B
end.
然后我们可以将compute_formula
定义为
Definition compute_formula (f: formula): output_type f :=
match f with
| @Formula _ _ t a func => func t a
end.
其他一些事情。我不确定您对extraArg
的意思。如果您对这意味着什么更具体,我也许可以为您提供帮助。另外,{(至少在战术之外)没有一种方法可以A isof type2
来完成您想要的事情。