,它看起来像Coq中使用的归纳构造的演算,对于归纳类型有不相交的内射构造函数。
在普通的构造演算(例如,没有原始归纳类型)中,对类型(例如,∏(Nat: *).∏(Succ: Nat → Nat).∏(Zero: Nat).Nat)使用模拟编码,这仍然是正确的吗?我能始终找出使用了哪个“构造函数”吗?此外,内射性(如在∀a b.I a = I b → a = b中)是否可在带有Pr
我可以定义以下归纳类型:| c1 : forall (A : Type), A -> T A
| c2 : T unit.但是,命令Check (c1 (T nat))在消息中失败:术语T nat的类型是Type@{max(Set, Top.3+1)},而它的类型是Type@{Top.3} (宇宙不一致)。我如何调整上述归纳定义,使c1 (T nat)不会造成宇宙不一致,并且不设
当我证明一些定理时,我的目标随着我应用越来越多的策略而变化。一般来说,目标倾向于分成多个子目标,子目标更简单。在最后一点,Coq决定目标是被证明的。这个“经过验证”的目标是什么样子的?*)换句话说,当我最终应用reflexivity时,Coq只是说** Got it **而没有任何解释。有没有办法获得更多关于它实际做了什么的细节,或者为什么它决定这个目标是被证明的?
在Agda中,似乎通常有两种改进集合的方法。一种方法是简单地编写一个函数,检查一个属性是否持有,并将其解除。= false
Truthy list = T (has_true list)data Truthy : List Bool -> Set where
Here : (x : Bool) -> (x ≡ tr
下面是我试图在Coq中实现的一个简化版本。我有一个归纳类型,比如foo,它的构造函数接受另一种类型的A,还有一个带有A输入的函数。我还有一个函数,给定一个foo类型的对象,它告诉我用来构造它的类型是什么。但是现在,我想定义一个函数,它接受类型为foo的对象foo和类型为foo_type x的对象y,并返回f y