以一阶逻辑构建知识库的过程称为知识工程。在知识工程中,研究特定领域、学习该领域的重要概念并生成对象的形式表示的人被称为知识工程师。
在本主题中,我们将了解已经熟悉的电子电路领域的知识工程过程。这种方式主要适用于创建专用知识库。
以下是知识工程过程的一些主要步骤。使用这些步骤,我们将开发一个知识库,使我们能够推理下面给出的数字电路(一位全加器)
该过程的第一步是识别任务,对于数字电路,有各种推理任务。
在第一级或最高级别,我们将检查电路的功能:
电路添加是否正确?
如果所有输入都为高电平,门 A2 的输出将是多少?
在第二级,我们将检查电路结构细节,例如:
哪个门连接到第一个输入端?
电路有反馈回路吗?
第二步,我们将汇总数字电路所需的相关知识。所以对于数字电路,我们需要具备以下知识:
逻辑电路由线和门组成。
信号通过导线流到门的输入端,每个门产生相应的输出,并进一步流动。
在这个逻辑电路中,使用了四种类型的门:AND、OR、XOR 和 NOT。
所有这些门都有一个输出端和两个输入端(除了非门,它有一个输入端)。
该过程的下一步是选择函数、谓词和常量来表示电路、终端、信号和门。首先,我们将把门和其他物体区分开来。每个门都表示为一个由常量命名的对象,例如Gate(X1)。每个门的功能由它的类型决定,它被视为常量,例如AND、OR、XOR 或 NOT。电路将由谓词标识:Circuit (C1)。
对于终端,我们将使用谓词:Terminal(x)。
对于门输入,我们将使用函数In(1, X1)来表示门的第一个输入端,对于输出端,我们将使用Out (1, X1)。
函数Arity(c, i, j)用于表示电路c有i个输入,j个输出。
门之间的连通性可以用谓词Connect(Out(1, X1), In(1, X1)) 表示。
我们使用一元谓词On (t),如果终端上的信号打开,则该谓词为真。
为了对逻辑电路的一般知识进行编码,我们需要一些以下规则:
如果连接了两个端子,则它们具有相同的输入信号,可以表示为:
∀ t1, t2 Terminal (t1) ∧ Terminal (t2) ∧ Connect (t1, t2) → Signal (t1) = Signal (2).
每个终端的信号将具有值 0 或 1,它将表示为:
∀ t Terminal (t) →Signal (t) = 1 ∨Signal (t) = 0.
连接谓词是可交换的:
∀ t1, t2 Connect(t1, t2) → Connect (t2, t1).
门的类型表示:
∀ g Gate(g) ∧ r = Type(g) → r = OR ∨r = AND ∨r = XOR ∨r = NOT.
当且仅当与门的任何输入为零时,与门的输出才为零。
∀ g Gate(g) ∧ Type(g) = AND →Signal (Out(1, g))= 0 ⇔ ∃n Signal (In(n, g))= 0.
或门的输出为 1 当且仅当其任何输入为 1:
∀ g Gate(g) ∧ Type(g) = OR → Signal (Out(1, g))= 1 ⇔ ∃n Signal (In(n, g))= 1
XOR 门的输出为 1 当且仅当其输入不同:
∀ g Gate(g) ∧ Type(g) = XOR → Signal (Out(1, g)) = 1 ⇔ Signal (In(1, g)) ≠ Signal (In(2, g)).
非门的输出是其输入的反相:
∀ g Gate(g) ∧ Type(g) = NOT → Signal (In(1, g)) ≠ Signal (Out(1, g)).
上述电路中的所有门都有两个输入和一个输出(非门除外)。
∀ g Gate(g) ∧ Type(g) = NOT → Arity(g, 1, 1) ∀ g Gate(g) ∧ r =Type(g) ∧ (r= AND ∨r= OR ∨r= XOR) → Arity (g, 2, 1).
所有门都是逻辑电路:
∀ g Gate(g) → Circuit (g).
现在我们编码电路C1的问题,首先我们对电路及其门元件进行分类。如果已经考虑了有关问题的本体,则这一步很容易。这一步涉及编写概念实例的简单原子句子,称为本体。
对于给定的电路 C1,我们可以将问题实例编码为原子句子,如下所示:
由于电路中有两个 XOR、两个 AND 和一个 OR 门,因此这些门的原子语句将是:
For XOR gate: Type(x1)= XOR, Type(X2) = XOR For AND gate: Type(A1) = AND, Type(A2)= AND For OR gate: Type (O1) = OR.
然后代表所有门之间的连接。
在这一步中,我们将找到加法器电路所有终端的所有可能值集。第一个查询将是:
将产生电路 C1 的第一个输出为 0 和第二个输出为 1 的输入组合应该是什么?
∃ i1, i2, i3 Signal (In(1, C1))=i1 ∧ Signal (In(2, C1))=i2 ∧ Signal (In(3, C1))= i3 ∧ Signal (Out(1, C1)) =0 ∧ Signal (Out(2, C1))=1
现在我们将调试知识库,这是完整过程的最后一步。在这一步中,我们将尝试调试知识库的问题。
在知识库中,我们可能省略了诸如 1 ≠ 0 之类的断言。