如何在Coq中引发异常?(在比赛中…结束)
我需要定义递归定义,但我还不知道如何正确地定义()。 所以我想有一个部分定义的函数,它会告诉我们何时需要编写额外的递归级别如何在Coq中引发异常?(在比赛中…结束),coq,Coq,我需要定义递归定义,但我还不知道如何正确地定义()。 所以我想有一个部分定义的函数,它会告诉我们何时需要编写额外的递归级别 Context (qsigT: forall (A : Type) (P : forall a : A, Type), Type). Context (qpr1: forall (A : Type) (P : forall a : A, Type), (@qsigT A P) -> A ). Record Category :={ ty:>Type }. Co
Context (qsigT: forall (A : Type) (P : forall a : A, Type), Type).
Context (qpr1: forall (A : Type) (P : forall a : A, Type), (@qsigT A P) -> A ).
Record Category :={
ty:>Type
}.
Context (uc:Category).
Context (mO mS: uc -> Type).
Definition ur0:= (@qsigT uc (fun x => mO (x) ) ).
Definition ur1:= (@qsigT ur0 (fun x => mS (qpr1 _ _ x) ) ).
Definition ur2:= (@qsigT ur1 (fun x => mS (qpr1 _ _ (qpr1 _ _ x)) ) ).
Definition ur3:= (@qsigT ur2 (fun x => mS (qpr1 _ _ (qpr1 _ _ (qpr1 _ _ x))) ) ).
(*and so on ...*)
Definition ur (n: nat) := (match n with
|0 => ur0
|1 => ur1
|2 => ur2
|_ => ur3
(*|_ => error*)
end).
1) 是否可能对所有大于3的自然数创建异常?(模式匹配期间)
2) 有没有一种低级仪器不会强迫我使用单子
3) 是否有可能对Coq中的所有自然数定义我的函数“ur”
4) 是否有某种组合器将函数“pr1”应用n次
5) 我应该创建5个不同的问题(其中一个在meta:-)还是这是正确的提问方式
1) 是否有可能在所有自然数上创建例外
超过3个?(模式匹配期间)
不,Coq是一种完整的语言。这方面的标准模式是使函数返回类型T
的选项T
,这样您就可以在偏爱单子中工作。例如:
Definition ur (n: nat) := (match n with
| 0 => Some ur0
| 1 => Some ur1
| 2 => Some ur2
| 3 => Some ur3
| _ => None
end).
2) 有没有一种低级乐器不会强迫我使用单子
见上文。你是否想叫它“monad”取决于你自己
另一种方法是在模式匹配“失败”时返回一个“默认”值urF
。在各种情况下,此方法比选项类型更方便
3) 是否有可能对Coq中的所有自然数定义我的函数“ur”
我想是的。请提供缺少的定义,我们可以尝试
4) 是否有某种组合器将函数“pr1”应用n次
原则上是的,但这取决于你想要的确切类型
5) 我应该创建5个不同的问题(其中一个在meta:-)还是这是正确的提问方式
也许吧。这个问题最大的问题是代码不正确
独立的。对于1)我们也可以使用归纳数据类型,并使用关系而不是函数进行工作。的确!但是你的定义没有简化,所以这是一个必须仔细权衡的权衡。一般来说,如果函数是可计算的,我总是更喜欢定义而不是归纳的。(3)我修改了一个代码,使其自包含。非常感谢你对我上一个问题的正确回答。把“ur”的定义写在整个nat中是个问题。我真的需要一些帮助。无法使用
admit
来模拟,例如Haskell的未定义的行为?@k_g不完全正确,特别是在8.5中,但我想这是另一个问题。