我有一个编程语言的AST的数据类型,我想解释一下,但AST大约有10个不同的构造函数。
data Term : Set where
UnitTerm : Term
VarTerm : Var -> Term
...
SeqTerm : Term -> Term -> Term
我正在尝试编写一个函数,它对这种语言的语法树具有可判定的等价性。从理论上讲,这很简单:没有什么太复杂的,它只是存储在AST中的简单数据。
问题是,编写这样一个函数似乎需要大约100个用例:对于每个构造函数,有10个用例。
eqDecide : (x : Term) -> (y
下面是显示此问题的最小演示代码:
interface A
fun <T1, T2> test() where T2 : T1, T2 : A {}
当我试图编译它时,编译器会抱怨:
错误:(81,25) Kotlin: Type参数如果被另一个类型参数限制,它就不能有任何其他边界
我读过,但只找到以下绑定限制:
类型参数不能将自身指定为自己的绑定,而多个类型参数不能以循环方式相互指定为绑定。
这并不能解释我遇到的限制。
我研究了Kotlin的问题跟踪器,我发现了一个关于这个限制的问题:。然而,这一问题被拒绝的原因如下(2017年5月6日更新: Stanislav
我对哈斯克尔很陌生,只是玩了一会儿。
我编写了一个轻量级的OOP仿真:
--OOP.hs
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, UndecidableInstances, ScopedTypeVariables, FunctionalDependencies #-}
module OOP where
class Provides obj iface where
provide::obj->iface
(#>)::obj->(iface->a)->a
o #>
假设我有算符A和算符B,它们作用于f(x) = 2x。如何创建一个函数来说明在python中A(B(f(X) == B(A(f(X)?
这是我的尝试:
#Commutation: Creating a function that checks whether operators A and B commutate on some dummy function f(x) = 2*x
#[A,B](2x) =?= 0
def commutate(A,B):
f = lambda x: 2*x
if lambda x: A(B(f)) - B(A(f)) == 0:
是否有可能定义一个简单的相等语法概念(类似于GHC可能自动派生为Haskell 98类型的Eq实例),而不显式地证明每个数据构造函数是内射的,或者执行类似的操作,例如定义每个构造函数的回缩和使用cong?
换句话说,是否有可能更直接地利用数据构造函数的内射性,而不是每个构造函数引入一个辅助函数?
下面以自然数为例。
module Eq where
open import Function
open import Relation.Binary
open import Relation.Binary.PropositionalEquality
open import R
当查看可判定相等类型的结果时(特别是在中),有一些结果(对于A类型)是需要的
forall x y : A, x = y \/ x <> y
而有些人则要求
forall x y : A, {x = y} + {x <> y}
我的印象是,这是最后一个被称为可决定的平等,但我非常不确定的差别是什么。我知道x = y \/ x <> y在Prop和{x = y} + {x <> y}中是在Set中,我可以证明第一个是从第二个,而不是反过来。据我所知,这是因为不允许我从Prop类型的值构造Set类型的值。
有人能分辨出两者的区别吗?是否有某种
我正在试着解决这个问题。希望有人能帮上忙。
假设我们有一个名为Confusion的程序;
Program confusion
if(Virus-Finder(Confusion) = false) then
infect-executable
else
halt
End program confusion
显然这是伪代码,所以不会运行。
对于任何程序P,我们可以运行Virus-Finder(P),如果是病毒,则结果为True,如果不是,则结果为False。
infect-executable是一个模块,它扫描内存中的可执行程序,并在这些可执行程序中复制程序Confusion。
我们
我在想的是证据不相关的问题。一份可以证明的声明说:
如果一种类型的相等是可判定的,那么平等语句只能有一个证明,即自反性。
我想知道是否有可能在COQ中使用多个等式证明来构造类型。因此,我会问,下面的构造是否一致?
(*it is known that f=g is undecidable in COQ *)
Definition f(n:nat) := n.
Definition g(n:nat) := n+0.
Axiom p1: f=g.
Axiom p2: f=g.
Axiom nonirrelevance:p1<>p2.
我在这里困惑的是,通过引入p1,