Finite-domain arithmetic rule regression, replayable change witnesses and exact minimum-field counterexamples
moon add DWS-ai-nb/kiln@0.2.1import {
"DWS-ai-nb/kiln/model",
"DWS-ai-nb/kiln/regression",
}git clone https://github.com/DWS-ai-nb/kiln.git
cd kiln
moon update
moon build --target js
moon build api --target js| 场景 | 输入与操作 | 可复现的结果 |
|---|---|---|
| 价格规则更新 | examples/regression/pricing/;新规则禁止负应付金额 | 4 个旧接受/新拒绝输入;相对所给基线最近反例只改 1 个字段 |
| 配置兼容回归 | examples/regression/deployment/;兼容表误删 JS/server 组合,保留存储与持久化条件 | 输出受影响的完整配置及 runtime-host 违规,供部署测试回放 |
| 选题配额修改 | examples/regression/quota/;基础题配额由 1 改为 2,互斥条件保留 | 找到旧版唯一合法选集被拒绝;新配额无合法选集;可以继续用精确求解和冲突解释定位问题 |
# 退出 1:确有接受/拒绝变化;输出可回放输入和命名违规
moon run cmd/regression -- diff examples/regression/pricing/before.json examples/regression/pricing/after.json
# 退出 1:找到距离基线最少改动字段的见证,minimal=true 才证明最优
moon run cmd/regression -- closest examples/regression/pricing/before.json examples/regression/pricing/after.json --baseline examples/regression/pricing/baseline.json
# 退出 0:两种算术写法在声明域内等价
moon run cmd/regression -- diff examples/regression/equivalent/before.json examples/regression/equivalent/after.json
# 退出 3:预算耗尽,无见证时 relation=unknown
moon run cmd/regression -- diff examples/regression/pricing/before.json examples/regression/pricing/after.json --budget 0moon run cmd/regression -- replay BEFORE.json AFTER.json --assignment case.json{
"format": "kiln.model/1",
"variables": [
{"name": "subtotal", "domain": [0, 50, 100]},
{"name": "coupon", "domain": [0, 20, 50]}
],
"rules": [
{"id": "nonnegative", "assert": [">=", ["-", "subtotal", "coupon"], 0]}
]
}flowchart LR
A[两版域和约束] --> B[原域接受谓词与有限并集]
B --> C[接受结果的对称差]
C --> D[确定性完整搜索或预算中断]
D --> E[回放区分输入]
C --> F[Hamming 目标精确最小化]| 结果 | 可以得出的结论 |
|---|---|
| relation=changed | 至少一个已回放的区分输入,差异确实存在 |
| relation=equivalent | 搜索穷尽且零区分输入,只针对报告中的有限域 |
| relation=unknown | 没有足够证据;不能按兼容或等价放行 |
| complete=false | 列表不是全部变化,常见原因是预算或见证数上限 |
| minimal=true | 已穷尽差异空间,Hamming 改动字段数为全局最小;并列解按确定性搜索顺序选取 |
# 配额与互斥精确建模:唯一选择 B/C/E,成本 12
moon run cmd/model -- solve examples/models/selection.json
moon run cmd/model -- minimize examples/models/selection.json
# 强制选择 A 后无解:返回四条相关冲突规则
moon run cmd/model -- explain examples/models/selection_unsat.json
# 直接对命名不变量求反例;当前 CLI 输出中携带取反后的模型
moon run cmd/model -- counterexample examples/models/pricing.json --rule nonnegative-chargemoon check --target all --deny-warn
moon test --target wasm-gc --deny-warn
moon test --target wasm --deny-warn
moon test --target js --deny-warn
moon fmt --check
moon info
moon build --target js
moon build api --target js
python tools/differential.py --cases 1600
python tools/regression_differential.py --cases 800
python tools/check_cli.pypub suberror SchemaError {
SchemaError(String)
}pub enum CmpOp {
CLt
CLe
CGt
CGe
CEq
CNe
}pub enum Family {
FQuadratic
FRational
}pub struct Rat {
num : Int64
den : Int64
}pub struct Rng {
state : UInt64
}pub enum Tok {
TIdent(String)
TNum(Int64)
TStr(String)
TPunct(String)
TBad(Char)
TEof
}pub enum Verdict {
WellPosed
NotQuadratic
NoRealRoots
DoubleRoot
IrrationalRoots
ExtraneousRoot
Identity
NotLinear
AnswerMismatch(String)
}fn escape_html(s : String) -> Stringfn parse_int_opt(s : String) -> Int?fn replace_all(s : String, from : String, to : String) -> StringInstall
Download zipFinite-domain arithmetic rule regression, replayable change witnesses and exact minimum-field counterexamples