Coq2Rust

Coq to Rust程序提取
授权协议 GPLv2
地区 不详
投 递 者 荀嘉熙
软件类型 开源软件
开源组织
适用人群 未知
操作系统 跨平台
所属分类 程序开发、 其他开发相关
 软件概览

Coq提取为Rust程序,采用OCaml实现。代码数基于原生Co代码。

input.v文件,可查看提取Coq条件示例。

尝试:

$ ./configure -local
$ ./compile.sh

提取示例代码:

enum Empty_set<> {

}


enum Unit<> {
 Tt
}


enum Bool<> {
 True,
 False
}


fn xorb(b1: Bool, b2: Bool) -> Bool {
  match b1 {
  Bool::True =>
    (match b2 {
     Bool::True => Bool::False,
     Bool::False => Bool::True
     }),
  Bool::False => b2
  }
}

enum Nat<> {
 O,
 S(Box<Nat>)
}


enum Prod< a, b> {
 Pair(Box<a>, Box<b>)
}


fn fst<p,a2>(p: Prod<p,a2>) -> p { match p {
Prod::Pair(box x,box y) => x
} }

enum List< a> {
 Nil,
 Cons(Box<a>, Box<(List<a>)>)
}


fn app<m0>(l: List<m0>, m0: List<m0>) -> List<m0> {
  match l {
  List::Nil => m0,
  List::Cons(box a,box l1) => List::Cons((box () a), (box () (app (l1,m0))))
  }
}

fn add(n0: Nat, m0: Nat) -> Nat {
  match n0 {
  Nat::O => m0,
  Nat::S(box p) => Nat::S((box () (add (p,m0))))
  }
}

fn n() -> Unit {
  Unit::Tt
}

fn m() -> Bool {
  Bool::True
}

enum Emp<> {

}


type Single =
  Unit;
  // singleton inductive, whose constructor was s

fn o() -> Single {
  Unit::Tt
}

enum Double<> {
 D0(Box<Unit>),
 D1
}


fn d() -> Double {
  Double::D0((box () Unit::Tt))
}

fn e() -> Double {
  Double::D1
}

enum Two_arg<> {
 Ta(Box<Unit>, Box<Unit>)
}


fn tv() -> Two_arg {
  Two_arg::Ta((box () Unit::Tt), (box () Unit::Tt))
}

fn num() -> Nat {
  Nat::S((box () (Nat::S((box () Nat::O)))))
}

fn f(d0: Double) -> Unit {
  Unit::Tt
}

fn g(d0: Double) -> Double { match d0 {
Double::D0(box u) => Double::D1,
Double::D1 => Double::D0((box () Unit::Tt))
} }

enum Even<> {
 O0,
 Eo(Box<Odd>)
}

enum Odd<> {
 Oe(Box<Even>)
}
  • Rust的安全系统编程 在编程语言设计中,两种看似不可调和的需求之间存在着长期的紧张关系。 ˲安全。我们需要静态地排除大类错误的强类型系统。我们想要自动内存管理。我们需要数据封装,这样我们就可以对对象的私有表示强制不变量,并确保它们不会被不受信任的代码破坏。 控制。至少对于“系统编程”应用程序(如Web浏览器、操作系统或游戏引擎)来说,性能或资源约束是主要关注的问题,我们希望确定数据的字节级表示。

  • Rust 2021 Roadmap 计划 Rust的2021 Edition提上日程了,官方发布了一篇博客提到未来几周会同步进行两项重要的任务: 1)进行2020年Rust开发者问卷调查 2)希望每一位Rust开发者可以写一篇关于对Rust未来展望的博客,并且提交到Google表单页 博客链接: https://blog.rust-lang.org/2020/09/03/Planning-2021

 相关资料
  • 我已经在文件中添加了所有相关build.gradle依赖项。尽管如此,当我尝试运行调用SOAP服务时,还是会出现以下错误。共享依赖项部分和错误详细信息。使用Java11。网上已经有很多答案,但似乎都不起作用。任何帮助/建议将是值得赞赏的。 低于错误跟踪

  • 在Spark bin目录下的spark-submit可以用来在集群上启动应用程序。它可以通过统一的接口使用Spark支持的所有集群管理器 ,所有你不必为每一个管理器做相应的配置。 用spark-submit启动应用程序 bin/spark-submit脚本负责建立包含Spark以及其依赖的类路径(classpath),它支持不同的集群管理器以及Spark支持的加载模式。 ./bin/spark-s

  • 问题内容: 有人可以向我解释差异吗? Provisioner-在docker中安装,运行,拉出容器中的一项工作。 提供程序-是运行VM的东西。即VBox运行ubuntu OS映像。 Docker如何成为提供者?它直接运行一些docker镜像吗?如果我在Windows上,必须有一些boot2docker的隐藏用法,对不对?我什么时候使用每个? 问题答案: Docker Provisioner帮助准备

  • 下面是我的app.js文件 下面是我的状态文件 我有一个模板,我想从那里导航到下一个状态 但是只要我点击这个锚标签,它就会把我导航回主页。(不去我打算去的州)。主要问题是URL(我猜)任何帮助都会很感激。

  • 我试着做一些服务,比如在symfony,我是按照一些教程,是做以下步骤:1。创建新的服务提供商: 我正在创建我的自定义助手: 名称空间应用程序\帮助程序; 类MailerHelper实现\Lightning\Contracts\Bus\SelfHandling{ } 我在config/app中注册它。php: 现在最大的问题是如何在我的控制器中调用它。 例如,在symfony中,如果声明一个服务,

  • null 如在第一个链接中所回答的,尝试类路径 正如第二个链接中所回答的,尝试了Multidex也没有成功。 注意:示例代码正在运行。 更新: 有趣的是,即使我只添加依赖项,也会出现同样的错误

  • 在和之后 在启动应用程序时,我开始得到以下错误: 在下一行中还添加了:

  • 从angular 4.4升级到5.0,并将所有HttpModule和Http更新到HttpClientModule后,我开始出现此错误。 我还再次添加了HttpModule,以确保这不是由于某些依赖关系造成的,但它并不能解决问题 应用程序内。模块,我已正确设置 我不知道这个错误是从哪里来的,或者我不知道如何去了解它。我也有一个警告(也放在下面),可能是相关的。 警告信息: