#set #reasoning #repl #browser #navigation #system #solver

app fasb

fasb - 面向属性的答案集浏览器

3个版本

0.1.2 2024年6月11日
0.1.1 2024年2月12日
0.1.0 2024年2月12日

#2 in #reasoning

每月 44 次下载

MIT 许可证

74KB
1.5K SLoC

Crates.io build workflow test workflow

fasb

实现了在 https://doi.org/10.1609/aaai.v36i5.20506 中介绍的 faceted answer set browser。

fasb 是在 clingo 求解器之上实现的 REPL 系统。它允许在定量推理的同时进行答案集导航。

fasb 还实现了一种将大量答案集压缩成代表性答案集的基本方法。更多关于代表性答案集的信息可以在 https://ebooks.iospress.nl/doi/10.3233/FAIA230280 中找到。

快速入门

fasb 作为 REPL

$ fasb program.lp 0
fasb v0.1.2
:: ! 2         -- enumerate up to 2 answer sets
solution 1:
a e
solution 2:
b d e
found 2
:: ?           -- query facets
b d c a
:: #!!         -- query weights based on answer set counting
0.3333 2 b     -- [reduces # by] [remaining #] [facet]
0.6667 1 d
0.3333 2 ~d
0.6667 1 c
0.3333 2 ~c
0.6667 1 a
0.3333 2 ~a
:: ' max#f     -- use facet-counting strictly goal-oriented mode 
:: $$          -- perform step (causing highest uncertainty reduction)
1.0000 0 d     -- activated facet `d` (reduced facet count by 100%)
:: @           -- query current route
d
:: !           -- enumerate all answer sets under current route
solution 1:
b d e
found 1
:: --          -- clear route
:: #!          -- query answer set count
3
:: > a|b&c|d   -- declare cnf query: (a or b) and (c or d)

fasb 作为解释器

$ cat script.fsb
! 1                  -- output 1 answer set
#?                   -- query facet count        
\ != #f 0 | $$ . ! 2 -- while condition | command . command
@                    -- display route                  
$ fasb program.lp 0 srcipt.fsb
fasb v0.1.2
:: ! 1
solution 1:
a e
found 1
:: #?
8
:: \ != #f 0 | $$ . ! 2
_ _ b
solution 1:
b d e
solution 2:
b c e
found 2
_ _ c
solution 1:
b c e
found 1
:: @
b c

安装

  1. 安装 cargo
  2. cargo安装 fasb

构建

  1. 安装 cargo
  2. cdfasb && cargo构建 -r

用法

fasb 程序[clingo 标志] [脚本]

除了作为 REPL 系统,fasb 还可以用作指令的解释器,这些指令将逐行执行。要使用 fasb 作为解释器,在安装或构建时添加功能标志 --feature interpreter。在解释器模式下,提供脚本。

正则表达式的指定语法可以在 这里 找到。

命令

  • \ condition | instructions ... 循环 '.' 分隔的指令,当 condition={!=,<,<=,>,>=}\s^\d+$\s{#a,#f,#r} 时
    • #a ... 答案集计数
    • #f ... 面积计数
    • #r ... 当前路径的大小
  • + args ... 激活 args=[空白分隔的面]
    • facet=[a|~a]
    • 例如:激活 +a 和 -b: + a ~b
  • > query ... 使用 |-分隔的命题和 &-分隔的子句声明 cnf
    • literal=[l|~l]
    • 例如:> a|~b&~a|b
  • - ... 取消之前激活的面
  • -- ... 取消所有面
  • ? regex ... 显示匹配正则表达式的当前面
  • @ ... 查询当前路径
  • ' arg ... 选择导航模式 arg=[{min,max}#{a,f}|go]
    • 默认目标导向(go)
    • min* ... 探索
    • max* ... 严格面向目标
    • *#a ... 解答集计数
    • *#f ... 面计数
  • ! n ... 列举 n 个解答集;如果没有提供 n,则将打印所有解答集
  • :! regex ... 打印与正则表达式匹配的方面诱导原子中关于目标原子的代表性解答集
  • #? ... 查询方面计数
  • #! ... 查询解答集计数
  • #?? regex ... 查询每个匹配正则表达式的方面下的方面计数(权重)
  • #!! regex ... 查询每个匹配正则表达式的方面下的解答集计数(权重)
  • :src ... 显示底层程序
  • :atoms ... 显示原子(Herbrand 底座)
  • :isatom atom ... 检查原子是否属于 Herbrand 底座
  • man ... 显示简短手册
  • :q ... 退出 fasb

依赖项

~19MB
~368K SLoC