From 7b7ceaf29c53ddd85ad27ebd3008117323586f59 Mon Sep 17 00:00:00 2001 From: Xie Yuheng Date: Fri, 6 Sep 2024 05:00:07 +0800 Subject: [PATCH] `checkConsistent` --- TODO.md | 4 ++-- src/belief-system/beliefSystemMerge.ts | 2 ++ src/belief-system/beliefSystemQuery.ts | 4 +++- src/belief-system/checkConsistent.ts | 12 ++++++++++++ src/belief/beliefCheckConsistent.ts | 13 +++++++++++++ src/belief/index.ts | 1 + 6 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 src/belief-system/checkConsistent.ts create mode 100644 src/belief/beliefCheckConsistent.ts diff --git a/TODO.md b/TODO.md index e33eb6b..c30773c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,11 +1,11 @@ -`MergeConflict` 移至 `merge-conflict/` -- 正与 `nothing/` 相同 - `barometer-belief.test` -- 在测试中增加书中的叙述 -- 与对 belief-system 的测试相同 # 4.3 Dependencies Explain Contradictions > https://github.com/cicada-lang/propagator/issues/9 +`MergeConflict` 移至 `merge-conflict/` -- 正与 `nothing/` 相同 + # 4.4 Dependencies Improve Search > https://github.com/cicada-lang/propagator/issues/4 diff --git a/src/belief-system/beliefSystemMerge.ts b/src/belief-system/beliefSystemMerge.ts index 685d0bb..f8d4607 100644 --- a/src/belief-system/beliefSystemMerge.ts +++ b/src/belief-system/beliefSystemMerge.ts @@ -2,6 +2,7 @@ import { type MergeConflict } from "../merge/index.js" import { assimilateBelief } from "./assimilateBelief.js" import { assimilateBeliefSystem } from "./assimilateBeliefSystem.js" import { BeliefSystem } from "./BeliefSystem.js" +import { checkConsistent } from "./checkConsistent.js" import { strongestBelief } from "./strongestBelief.js" // Asking the belief system to deduce all the consequences of all its @@ -16,5 +17,6 @@ export function beliefSystemMerge( ): BeliefSystem | MergeConflict { const candidate = assimilateBeliefSystem(content, increment) const consequence = strongestBelief(candidate.beliefs) + checkConsistent(consequence) return assimilateBelief(candidate, consequence) } diff --git a/src/belief-system/beliefSystemQuery.ts b/src/belief-system/beliefSystemQuery.ts index 40beeb1..ffedd22 100644 --- a/src/belief-system/beliefSystemQuery.ts +++ b/src/belief-system/beliefSystemQuery.ts @@ -1,7 +1,8 @@ -import type { Belief } from "../belief/index.js" +import { type Belief } from "../belief/index.js" import type { Nothing } from "../nothing/Nothing.js" import type { BeliefSystem } from "./BeliefSystem.js" import { assimilateBelief } from "./assimilateBelief.js" +import { checkConsistent } from "./checkConsistent.js" import { strongestBelief } from "./strongestBelief.js" export function beliefSystemQuery( @@ -13,5 +14,6 @@ export function beliefSystemQuery( beliefSystem.beliefs = betterBeliefSystem.beliefs } + checkConsistent(answer) return answer } diff --git a/src/belief-system/checkConsistent.ts b/src/belief-system/checkConsistent.ts new file mode 100644 index 0000000..5104653 --- /dev/null +++ b/src/belief-system/checkConsistent.ts @@ -0,0 +1,12 @@ +import { detectMergeConflict } from "../merge/detectMergeConflict.js" +import { clearScheduledPropagators } from "../scheduler/schedule.js" +import { log } from "../utils/log.js" + +export function checkConsistent(value: any): void { + if (detectMergeConflict(value)) { + const who = "checkConsistent" + const message = "inconsistent value" + log({ who, message, value }) + clearScheduledPropagators() + } +} diff --git a/src/belief/beliefCheckConsistent.ts b/src/belief/beliefCheckConsistent.ts new file mode 100644 index 0000000..2044691 --- /dev/null +++ b/src/belief/beliefCheckConsistent.ts @@ -0,0 +1,13 @@ +import { detectMergeConflict } from "../merge/detectMergeConflict.js" +import { clearScheduledPropagators } from "../scheduler/schedule.js" +import { log } from "../utils/log.js" +import type { Belief } from "./Belief.js" + +export function beliefCheckConsistent(belief: Belief): void { + if (detectMergeConflict(belief)) { + const who = "beliefCheckConsistent" + const message = "inconsistent belief" + log({ who, message, belief }) + clearScheduledPropagators() + } +} diff --git a/src/belief/index.ts b/src/belief/index.ts index 9e7e4f1..0375f9b 100644 --- a/src/belief/index.ts +++ b/src/belief/index.ts @@ -1,3 +1,4 @@ export * from "./Belief.js" +export * from "./beliefCheckConsistent.js" export * from "./beliefEqual.js" export * from "./beliefMerge.js"