#client-server #interact #process #batch #running #mode #isabelle

isabelle-client

用于与 Isabelle 服务器交互的客户端

1 个不稳定版本

0.1.0 2023 年 3 月 9 日

#51#mode

Apache-2.0 协议

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 调用来等待执行完成并获取结果。同步命令(echoshutdowncancelpurge_theories)通常立即终止。它们返回一个 SyncResult,表示 Isabelle 是否成功运行了命令,并包含结果。异步命令(session_buildsession_startsession_stopuse_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