1 个不稳定版本
0.1.0 | 2023 年 3 月 9 日 |
---|
#51 在 #mode
43KB
825 行
Isabelle 客户端库
Isabelle 客户端的 Rust 实现,包括启动 Isabelle 服务器和在批处理模式下运行 Isabelle 进程的功能。
有关更多信息,请参阅Isabelle 系统手册。
主要功能
- 用于与 Isabelle 服务器进行异步交互的 TCP 客户端
- 本地 Isabelle 服务器启动和凭据检索
- 原始 Isabelle 进程批处理模式包装器
安装
要使用此库,只需将其作为依赖项包含在您的项目 Cargo.toml 文件中。
[dependencies]
isabelle = "0.1"
或者,在项目根目录下运行 cargo add isabelle-client
。
使用方法
要使用服务器或批处理工具,需要安装 Isabelle。
客户端
要连接到 Isabelle 服务器,首先通过调用客户端的 IsabelleClient::connect
方法创建一个实例。客户端实现了 Isabelle 服务器支持的多种命令的方法。目前支持以下命令:
echo
shutdown
cancel
session_build
session_start
session_stop
use_theories
purger_theories
所有方法都是 async
,需要 await
调用来等待执行完成并获取结果。同步命令(echo、
shutdown、
cancel 和
purge_theories
)通常立即终止。它们返回一个 SyncResult
,表示 Isabelle 是否成功运行了命令,并包含结果。异步命令(session_build、
session_start、
session_stop 和
use_theories
)在服务器上创建一个新任务。客户端等待该任务终止并返回一个包含结果的 AsyncResult
。
以下是一个示例
use isabelle_client::client::{AsyncResult, IsabelleClient, SyncResult};
use isabelle_client::client::args::*;
use isabelle_client::server::run_server;
use tokio_test::block_on;
// Start a server and connect to it
let mut server = run_server(Some("test-server")).unwrap();
let mut client = IsabelleClient::for_server(&server);
// Start session HOL
let session_args = SessionBuildArgs::session("HOL");
let session = block_on(client.session_start(&session_args)).unwrap();
// Load `Drinker` theory into the HOL session
let th_args = UseTheoriesArgs::for_session(&session.finished().session_id, &["~~/src/HOL/Examples/Drinker"]);
let load_th = block_on(client.use_theories(&th_args)).unwrap();
// Assert loading theory was successful
assert!(load_th.finished().ok);
// Exit the server
server.exit();
服务器
使用 run_server
函数启动 Isabelle 服务器或获取已知名称的本地运行实例的凭据(端口、密码)。可以使用 exit
方法退出正在运行的服务器。
以下是一个启动名为 "my-server" 的服务器的示例。
use isabelle_client::server::run_server;
// Run an Isabelle server named "my-server" locally
let mut server = run_server(Some("my-server")).unwrap();
// ...
// Exit the server
server.exit();
请注意,这只是一个对 isabelle server -n my-server
的包装器。特别是,如果本地已运行名为 "my-server" 的服务器,则函数将返回现有服务器的端口和密码。
批量模式
batch_process
函数是对异步调用 isabelle process
工具的包装。它接受一个 ProcessArgs
参数,该参数由以下内容组成:
- 要加载的理论
- 会话目录
- 可选的逻辑会话名称,以及
- 选项,以键值对的形式给出
可用的选项可以在系统手册中找到或使用 isabelle options
命令。 OptionsBuilder
提供了一种方便的方式来构建常见选项。
以下是一个示例
use isabelle_client::process::{batch_process, ProcessArgs};
use tokio_test::block_on;
let args = ProcessArgs::load_theories(&[String::from("~~/src/HOL/Examples/Drinker")]);
let output = block_on(batch_process(&args, None));
assert!(output.unwrap().status.success());
许可证
此库根据 MIT 许可证授权。有关详细信息,请参阅 LICENSE 文件。
依赖关系
~8–16MB
~196K SLoC