是否有任何传统格式来表示可以由计算机读取的数学公式?
我正在研究一些数学问题,并采用某种TDD方法.每当我陷入一个证明(或者只是我还没有证据,但对结果应该是什么的直觉)时,我倾向于编写一个小程序来检查到目前为止所做的一切都表现得像我认为的那样.我通常在我的证明中为一些中间结果写一个Haskell函数,一直玩,GHCi直到我确信我仍然朝着正确的方向前进.
我的绝对理想是拥有一些数学公式的规范形式,我可以使用一些工具输出到LaTeX和Haskell.我可以在上面运行QuickTest,如果步骤错误,它会告诉我.LaTeX的数学符号实际上非常接近规范形式,尽管读者推断了很多(你不想明确写出每个括号).
这个理想的工具看起来好得令人难以置信; 相反,为计算机拼出数学公式的正确方法是什么,也可能解析它?而环顾四周,我看到了很多简单的公式中使用完全*,+,-,/等.没有任何东西包括总和(例如过度集合),衍生品,所有"酷"的东西.而且,这种解析器的输出主要用于计算结果,给出变量的一些值; 不是为了将其翻译成其他语言(语言不可知,我猜).似乎这样的事情应该已经存在,或者应该有一个很好的理由.我错过了哪一个?
我在使用LiquidHaskell证明以下法律时遇到了麻烦:
它被称为DeMorgan定律(之一),并简单地指出,or对两个值的否定必须and与每个值的否定相同.它已经被证明了很长时间,并且是LiquidHaskell 教程中的一个例子.我正在学习本教程,但未能通过以下代码:
-- Test.hs
module Main where
main :: IO ()
main = return ()
(==>) :: Bool -> Bool -> Bool
False ==> False = True
False ==> True = True
True ==> True = True
True ==> False = False
(<=>) :: Bool -> Bool -> Bool
False <=> False = True
False <=> True = False
True <=> True = True
True <=> False = False
{-@ type TRUE = {v:Bool …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,即GHC是无法匹配Foo t和Foo t0,在那里它肯定看起来对我来说t ~ t0.这是一个最小的例子:
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
data Foobar :: * -> * where
Foobar :: Foo t -> Foobar t
type family Foo a :: *
class Bar t where
f :: Foobar t
g :: Foo t
-- f = Foobar g
Run Code Online (Sandbox Code Playgroud)
当取消注释最后一行时,GHC抱怨:
Couldn't match expected type ‘Foo t’ with actual type ‘Foo t0’
NB: ‘Foo’ is a type function, and may …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用Java Persistence API,并且我很乐意使用它.但是,我遇到了一个小的设计决定.
假设我经营一家汽车租赁店,有几辆车,几个客户,不同的客户可以使用不同的汽车.为了存储客户最喜欢的汽车,我会使用来自客户类的@OneToMany关系,以及目前租用汽车的客户,来自汽车类的@OneToOne.
现在,我应该如何存储客户驾驶的特定车辆的公里数?例如,使用MySQL数据库,我将创建一个包含三个(具有id的四个)列的表:customer_id,car_id和km.customer_id和car_id将是FK,公里......是不言自明的.
JPA的最佳方法是什么?我可以存储一个@OneToMany对象,例如来自客户的类,就像一对对象列表.第一个是汽车,第二个是客户驾驶汽车的公里数.但这感觉不对.有什么建议吗?
我一直在尝试继承ProcRuby中的类。我知道有很多其他方法可以实现我的类而无需实际继承Proc,但现在出于好奇我想知道。
我想要一个可以在没有作为参数传递的块的情况下实例化的类,但它就是行不通(这似乎就是原因)。很明显,您无法在Proc没有块的情况下实例化实际对象(即使使用procor也不行lamba):
Proc.new proc {|x| 2 * x } # => ArgumentError: tried to create Proc object without a block
Proc.new lambda {|x| 2 * x } # => ArgumentError: tried to create Proc object without a block
Run Code Online (Sandbox Code Playgroud)
我认为重写initialize可能会解决问题,但实际上重写也new行不通:
class MyClass < Proc
def new *args, &block
super { |x| 2 * x }
end
def initialize *args, &block
super { |x| 2 * …Run Code Online (Sandbox Code Playgroud)