小编mus*_*oom的帖子

Coq中的连词与含义

我目前正在阅读软件基础一书.当定义定义时,我经常会看到一些含义链,我相信连词会更有意义.例如,在定义鸽笼原则时,作者写道:

Theorem pigeonhole_principle: ?{X:Type} (l1 l2:list X),
  excluded_middle ?
  (?x, appears_in x l1 ? appears_in x l2) ?
  length l2 < length l1 ?
  repeats l1.
Run Code Online (Sandbox Code Playgroud)

如果看起来更像这样,那么这个定义对我来说会更有意义:

Theorem pigeonhole_principle: ?{X:Type} (l1 l2:list X),
  (excluded_middle /\
  (?x, appears_in x l1 ? appears_in x l2) /\
  length l2 < length l1) ?
  repeats l1.
Run Code Online (Sandbox Code Playgroud)

为什么第一个版本正确?为什么连词不合适?

这只是一个例子.更一般地说,我在问为什么连词似乎被避开以支持coq中的含义链.

coq

5
推荐指数
1
解决办法
504
查看次数

欧几里德分裂对自然的coq

是否有在Coq标准库中对自然进行欧几里德划分的功能?我一直找不到.如果没有,那么在数学上是否有理由不应该有一个?

我想要这个的原因是因为我试图将列表拆分成两个较小的列表.我希望一个列表大约是另一个列表的一半,所以我计算(长度xs)/ 2.

coq

5
推荐指数
1
解决办法
732
查看次数

不同rspec上下文中的代码重用

我试图在rails控制器规范中重用一些常用代码.对于管理员用户和普通用户,我有不同的上下文.但是,对于特定操作,大部分行为都是相同的,所以我尝试将该常见行为拉出到辅助函数中:

describe SomeController do
    def common_get_new
       # common stuff
    end 

    context "regular users" do
        describe "GET new" do
            common_get_new
        end
    end

    context "admin users" do
        describe "GET new" do
            common_get_new
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

undefined局部变量或方法`common_get_new'

我究竟做错了什么?

code-reuse rspec

5
推荐指数
1
解决办法
2834
查看次数

验证是否使用Mockito调用了方法而未指定参数

使用Mockito,是否可以使用间谍或模拟来验证函数是否被调用/未调用,而不提供实际参数?例如,如果我有一个类或对象:

class MyClass{
  def f(x : Int) = x
}

object MyObject{
  def f(x : Int) = x
}
Run Code Online (Sandbox Code Playgroud)

我想能够说出类似的话:

val my_class = mock[MyClass]
// Do something that causes method f of MyClass to be called
there was one(my_class).f // Doesn't give arguments

val my_object = spy(MyObject)
// Do something that causes method f of MyObject to be called
there was one(my_object).f // Doesn't give arguments
Run Code Online (Sandbox Code Playgroud)

我只是想验证方法是否被调用,而不是它接收到特定的参数.此外,当我检查没有调用函数时:

there was no(my_object).f
Run Code Online (Sandbox Code Playgroud)

我不想验证它是不是用某些参数调用的,而是根本没有调用它.

有没有办法做到这一点?

scala mockito specs2

5
推荐指数
1
解决办法
6846
查看次数

将Nat保持在固定范围内

我希望有一个Nat保持在固定范围内.我想要功能,如果他们要将数字推到范围之外incr,decr那就失败了.这似乎是一个很好的用例Fin,但我不确定如何使其工作.类型签名可能如下所示:

- Returns the next value in the ordered finite set.
- Returns Nothing if the input element is the last element in the set. 
incr : Fin n -> Maybe (Fin n)

- Returns the previous value in the ordered finite set.
- Returns Nothing if the input element is the first element in the set.
decr : Fin n -> Maybe (Fin n)
Run Code Online (Sandbox Code Playgroud)

Nat将被用于索引成Vect n.我如何实现incr …

idris

5
推荐指数
1
解决办法
99
查看次数

在伊德里斯强制一个参数大于另一个参数

我正在尝试编写一个带有mSmallest两个自然数的函数,nm作为输入并生成一个向量.输出向量包含具有m成员的有限集的最小n成员.

例如mSmallest 5 3,应该生产[FS (FS Z), FS Z, Z]哪个是Vect 3 (Fin 5)

我想限制输入参数m小于n.我试过这样的事情:

mSmallest : (n : Nat) -> (m : Nat) -> {auto p : n > m = True} -> Vect m (Fin n)
mSmallest Z Z = ?c_3                                                                   
mSmallest Z (S k) = ?c_5                                                               
mSmallest (S k) m = ?c_2
Run Code Online (Sandbox Code Playgroud)

由于输入,第二种情况不可能p.如何做到这样才能Z (S k)消除案件?

另外,有更好的方法来定义 …

idris

5
推荐指数
1
解决办法
227
查看次数

当有证据证明转换有效时,natToFin

natToFin从标准库函数具有以下特征:

natToFin : Nat -> (n : Nat) -> Maybe (Fin n)
Run Code Online (Sandbox Code Playgroud)

natToFin 4 5返回Just (FS (FS (FS (FS FZ)))) : Maybe (Fin 5),同时 natToFin 5 5返回Nothing.

我想要一个具有以下签名的函数:

myNatToFin : (m : Nat) -> (n : Nat) -> { auto p : n `GT` m } -> Fin n
Run Code Online (Sandbox Code Playgroud)

它的行为一样的标准库函数,但并不需要返回Maybe,因为它总是能够产生一个Fin nm考虑到n大于m.

我该如何实施myNatToFin

idris

5
推荐指数
1
解决办法
84
查看次数

如果输入不正好有 1 行,则返回错误,否则将输入传送到下一步

我有一系列用管道链接在一起的命令:

should_create_one_line | expects_one_line

第一个命令should_create_one_line应该生成只有一行的输出,但在奇怪的情况下,输出可能是多行或空。

我想在这两者之间添加一个步骤validate_one_line

should_create_one_line | validate_one_line | expects_one_line

如果其输入恰好包含 1 行,validate_one_line则将简单地输出其输入。如果其输入包含多于 1 行或为空,validate_one_line则应导致整个步骤序列停止并返回错误代码。

我可以使用什么命令validate_one_line

bash shell sh

5
推荐指数
1
解决办法
249
查看次数

使用WebSharper编译器编写Node.js应用程序

我想知道是否可以使用WebSharper编译器在F#中编写Node.js应用程序.有没有可用的资源可以告诉我如何做到这一点?有没有充分的理由不尝试这样做?

javascript f# node.js websharper

4
推荐指数
1
解决办法
561
查看次数

无形可扩展记录的平等取决于字段顺序

这两个记录具有相同的字段,具有相同的值,但顺序不同:

val person1 = ("age" ->> 34) :: ("name" ->> "Jane") :: HNil
val person2 = ("name" ->> "Jane") :: ("age" ->> 34) :: HNil
Run Code Online (Sandbox Code Playgroud)

当我使用时,这些被认为是相等的,==因为字段的顺序是不同的.它们是HLists,所以在检查相等性时,顺序对我来说是有意义的,但我觉得彼此排列的记录应该是平等的.我也觉得他们应该有相同的类型,但他们没有,因为他们是HList.

有没有办法让记录的值和类型相等,更像我期望的行为?另外,这种方式实施的原因是什么?可以HMap使用吗?

scala shapeless

4
推荐指数
1
解决办法
158
查看次数

标签 统计

idris ×3

coq ×2

scala ×2

bash ×1

code-reuse ×1

f# ×1

javascript ×1

mockito ×1

node.js ×1

rspec ×1

sh ×1

shapeless ×1

shell ×1

specs2 ×1

websharper ×1