作用代数

在代数逻辑中，作用代数是既是剩余半格又是克莱尼代数的代数结构。它向剩余半格增加了克莱尼代数的星号或自反传递闭包运算，或者说向克莱尼代数增加了剩余半格的左和右剩余或蕴涵运算。不像程序的动态逻辑和其他模态逻辑，对于它们程序和命题形成了两个不同的类别，作用代数合并了二者为一个单一类别。它可被认为是变异的直觉逻辑，带有星号并带有非交换性的合取，它的单位元不需要是顶元素。不像克莱尼代数，作用代数形成了一个簇，它进一步的是可有限公理化的，至关重要的公理是a·(a → a)* ≤ a。不像克莱尼代数的等式理论的模型(正则表达式等式)，作用代数的星号运算是在所有等式的模型中自反传递闭包。

例子

任何Heyting代数(因此任何布尔代数)通过选取· 为 ∧ 和 a* = 1 就得到了一个作用代数。这对于星号是必要和充分的，因为 Heyting 代数的顶元素1 是它的唯一自反元素，并且是传递的，还大于等于这个代数的所有元素。
在字母表Σ 上所有形式语言(有限字符串的集合)的集合2Σ* 形成了一个作用代数，带有0 为空集，1 = {ε}，∨ 为并集，· 为串接，L←M 为所有字符串x 使得 xM ⊆ L 的集合(对偶于M→L)，而 L* 是在L 中字符串形成的所有字符串的集合(Kleene闭包)。
在集合X 上的所有二元关系的集合 形成一个作用代数，带有0 为空关系，1 为恒等关系或等式，∨ 为并集，· 为关系复合，R←S 为所有有序对(x,y) 使得对于所有X 中的z 有 ySz 蕴涵 xRz 所构成的关系(对偶于S→R)，和 R* 为 R 的自反传递闭包，定义为在所有关系Rⁿ 对整数n ≥ 0 的并集。