我有一个编程语言的AST的数据类型,我想解释一下,但AST大约有10个不同的构造函数。SeqTerm : Term -> Term -> Term
我正在尝试编写一个函数,它对这种语言的语法树具有可判定的等价性。从理论上讲,这很简单:没有什么太复杂的,它只是存储在AST中的简单数据。问题是,有一堆多余的案例。在构造函数匹配的第一个模式匹配之后,理想情况
这种方法的一个可能的缺点是,给定一个monoid m:monoid a (具有支持类型a的monoid )和m':monoid b (具有支持类型b的monoid ),我们甚至不能编写相等m = m'(更不用说证明它了),因为它是错误类型的。不知何故,有人会争辩说,如果m和m'具有相同的支持(a m = a m),并且运算符是相等的(app m = app m',这可能要归功于
假设我有以下类型的记录: Record R (A : Type) (P : A -> Prop) := {val : A; prop : P val}.要证明两个这样的记录相等,(通过证明无关)证明它们的字段val相等就足够了: Goal forall A P (r1 r2 : R A P), val _ _ r1 = val _ _ r2 -> r1在约翰·梅杰的平等的情况下,类似的目标是否可以
我刚开始玩idris和定理证明。我可以在互联网上学习大多数基本事实的证据,所以我想尝试一些我自己的武断的东西。因此,我想为map的以下基本属性编写一个验证项:prf : map id = id
直觉上,我可以想象证明应该如何工作:取一个任意的列表l并分析映射id l的可能性。当l是空的时候,很明显;当l是非空的