Javascript 如何用过程语言或面向对象语言实现“forall”(数学)

Javascript 如何用过程语言或面向对象语言实现“forall”(数学),javascript,ruby,proof,formal-methods,forall,Javascript,Ruby,Proof,Formal Methods,Forall,我试图理解如何用过程语言或OO语言(如Ruby或JavaScript)为所有实现。对于(这是Coq): 这有各种各样的错误。它本质上说,“对于你用点p1和p2创建的每一个公理,它必须满足在一条线上的属性,等等……”这并不是我想要它做的。我希望它能实现定义一个实际公理的数学目标 想知道如何在Ruby或JavaScript这样的语言中实现这一点,如果不能直接实现,则尽可能接近。即使它只是一个DSL或一个定义一些数据的对象,知道如何做也会很有帮助 让我明白的第一点是,attr:p1和attr定义似乎适

我试图理解如何用过程语言或OO语言(如Ruby或JavaScript)为所有实现
。对于(这是Coq):

这有各种各样的错误。它本质上说,“对于你用点p1和p2创建的每一个公理,它必须满足在一条线上的属性,等等……”这并不是我想要它做的。我希望它能实现定义一个实际公理的数学目标

想知道如何在Ruby或JavaScript这样的语言中实现这一点,如果不能直接实现,则尽可能接近。即使它只是一个DSL或一个定义一些数据的对象,知道如何做也会很有帮助

让我明白的第一点是,
attr:p1
和attr定义似乎适用于每个实例。也就是说,它似乎对所有的都有所说明,但我无法准确指出

也许更像这样的东西更接近:

class MainAxiom
  # forall p1 and p2
  attr :p1 # forall p1
  attr :p2 # forall p2
  attr :line (p1, p2) -> Line.new(p1, p2)

  check_lies_in :p1, :line
  check_lies_in :p2, :line
end

我只想在过程性的/OO语言中,对所有的
定义有一点接近

如果允许我在Smalltalk中推理,其中块是类
BlockClose
的对象,我会假设您将要量化的属性表示为块
p

为了简单起见,我们假设该属性依赖于一个参数
x
。然后
p(x)
将对应于Smalltalk表达式

p value: x
它使用参数
x
计算块
p

通过这种方式,您可以在类
BlockClosure
中实现Smalltalk方法
forAll:
,如下所示:

forAll: aCollection
  aCollection do: [:x | (self value: x) ifFalse: [^false]].
  ^true
它检查接收方块表示的属性
p
对于
aCollection
(您的宇宙)中的所有元素的计算结果是否为
true

如果您的宇宙没有改变(问题上下文中的常见情况),并且属性发生了什么变化,那么您可以定义类
宇宙
,它将在其实例变量
内容
中保存元素集合。然后,您可以在
Universe

forAll: aProperty
  ^aProperty forAll: contents

其中内部
forAll:
消息是在
BlockClosure

中实现的,您从哪里获得
类?我只是在编写伪代码。很高兴看到您计划如何使用它。现在我可以看出,初始化器中这一行的简单实例化是它存在的一种证明。
forAll: aCollection
  aCollection do: [:x | (self value: x) ifFalse: [^false]].
  ^true
forAll: aProperty
  ^aProperty forAll: contents