操作系统形式化验证实践教程(4) - 工具环境

2020-08-06  本文已影响0人  Jtag特工

操作系统形式化验证实践教程(4) - 工具环境

如前面我们所了解的,Isabelle/HOL是套相当复杂的系统,它的底层基于Standard ML语言,它自己使用HOL和Isar语言,它可以生成ocaml,haskell和scala的代码,它有要使用到很多的自动定理证明工具。

除了相当强大的IDE环境,Isabelle也提供了命令行工具和大量的配置。

Isabelle环境

可以通过isabelle getenv -a命令获取Isabelle的详细配置信息:

我们分类列举一些常见的配置项,通过这些大家可以理解到Isabelle/HOL底层的架构:

Isabelle会话

证明是一个复杂的系统,涉及到很多库和文档等的协作。所以除了每个定理文件之外,我们还需要一个类似于Makefile一样的工程组织文件,在Isabelle中被称为会话ROOT规范。文件名就叫ROOT。

我们就不像规范一样描述结构了,直接上个真实的例子,这个例子来源于seL4的C-parser:

chapter "C-Parser"

session "Simpl-VCG" = Word_Lib +
  sessions
    "HOL-Statespace"
  theories
    "Simpl/Vcg"

session CParser = "Simpl-VCG" +
  sessions
    "HOL-Library"
    "HOL-Word"
    "Lib"
  theories
    "CTranslation"

Chapter

首先一个ROOT可以有个Chapter来描述下这个规范的名字,将来用于生成browse info时使用,如果没有指定的话默认为:“Unsorted”。总之就是个名字,没有形式化的含义。

session

session来定义一个会话单元,可以像面向对象编程一样继承自某个父会话。
格式为:

session 会话名 = 父会话名 + 
sessions
引用的会话列表
theories
定理列表

session中还可以指定路径,用in表示。另外还可以指定options。不谈语法,我们还是例子说话:

session AsmRefineTest in "testfiles" = AsmRefine +
  options [threads = 1] (* use of unsync references in test files *)
  sessions
    CParser
  theories
    "global_asm_stmt_gref"
    "inf_loop_gref"
    "global_array_swap_gref"

document_files

除了会话和定理之外,文档生成也是定理证明的重要部分。可以在options中指定输出的文档类型,然后通过document_files区段来指定文档要引用的文件。document_files也可以通过in来指定路径。我们还是看个例子:

session ASpecDoc in "abstract" = Word_Lib +
  options [document=pdf]
  sessions
    "HOL-Library"
    Lib
    ExecSpec
  theories
    "Intro_Doc"
  theories
    "Syscall_A"
    "Glossary_Doc"
    (* "KernelInit_A" *)
  document_files
    "VERSION"    (* generated by `make ASpec` *)
    "gitrev.tex" (* generated by `make ASpec` *)
    "root.tex"
    "root.bib"
    "defs.bib"
    "ulem.sty"
    "imgs/CDT.pdf"
    "imgs/seL4-background_01.pdf"
    "imgs/seL4-background_03.pdf"
    "imgs/seL4-background_04.pdf"
    "imgs/sel4objects_01.pdf"
    "imgs/sel4objects_05.pdf"
    "imgs/sel4_internals_01.pdf"
  document_files (in "document/$L4V_ARCH")
    "ARCH.tex"

小结

环境配好,ROOT文件写好,我们就可以通过isabelle build命令去执行编译和文档生成的命令了。

下一步,我们就直击一个形式化验证操作系统的现场,去看看seL4是如何进行形式化验证的。需要的基础后面用到我们会慢慢展开。

上一篇 下一篇

猜你喜欢

热点阅读