我喜欢所有的编译时间,我喜欢这样的想法:一旦您编译了程序,就可以保证程序的执行。一般来说,静态类型系统(Haskell,C ++等)似乎比任何动态类型系统都提供了更强大的编译时保证。 据我了解,Ada在编译时间检查方面走得更远,并且能够在执行之前检测到更大范围的错误。考虑到在某个时间点,它被选用于脆弱的领域(编程错误可能会导致人员伤亡),因此它也被认为是相当安全的。 现在,我想知道:如果更强大的静态保证导致代码更完整,更安全,那么我们为什么不朝这个方向进行更多研究呢? 一种似乎缺少的东西的例子是一种语言,它不是定义int具有由基础体系结构的位数确定的范围的通用类型,而是可以具有范围(在下面的示例中Int [a..b]描述了一个介于包括a和b): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int [-23..11] 或(从Ada那里获得): a : Int [mod 24] b : Int [mod 24] a + b : Int [mod 24] …
我正在查看构造演算及其在Lambda Cube中的位置。 如果我理解正确,则可以将多维数据集的每个轴都认为是向简单类型的演算添加了另一个涉及类型的操作。第一个轴添加类型到术语运算符,第二个类型到类型运算符和第三个从属类型或术语到类型运算符。CoC具有这三个要素。λ→λ→\lambda_\to 但是,CoC引入了一个术语,并根据推理规则指出,但未使用。我了解这是用于同义命题,但是逻辑命题并未以此为准。P - [R ø p :Ť ÿ p ëPropPropPropProp:TypeProp:TypeProp : Type 您能否向我解释的用途,出现的时间/地点,并根据立方体的轴进行解释(如果确实可以这样做的话)?PropPropProp
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
我正在努力理解类型的通用和存在量化的目的。我正在玩玩根据结构演算编写玩具语言的游戏。我一直在阅读有关Morte和Henk的信息,以帮助我更好地理解。 我不明白为什么CoC同时具有lambda和forall抽象。 (∀ X :甲。乙)(λ X :甲。乙)(λx:A.B)(\lambda x:A . B) (∀ X :甲。乙)(∀x:A.B)(\forall x:A . B) 在我看来,lambda包含了手动传递类型的系统中的所有功能。换句话说,以下 (∀ X :* 。λ 一个:X 。一)(∀x:∗.λa:x.a)(\forall x : *. \lambda a : x. a) 可以替换为 (λ X :* 。λ 一个:X 。一)(λx:∗.λa:x.a)(\lambda x : *. \lambda a : x. a) 如果是第一次将其应用于所使用的类型。 我想念什么?有哪些可以阅读的论文,博客或文章对我有帮助? 谢谢。
引起我注意的是,像OCaml这样的功能语言中类型推断的成本可能很高。该主张是有一系列表达式,使得对于每个表达式,相应类型的长度在表达式的长度上是指数的。 我设计了以下顺序。我的问题是:您是否知道一个具有更简洁表达式的序列,可以实现相同的类型? # fun a -> a;; - : 'a -> 'a = <fun> # fun b a -> b a;; - : ('a -> 'b) -> 'a -> 'b = <fun> # fun c b a -> c b (b a);; - : (('a -> 'b) -> 'b -> …