文献分享: 注释数据库&溯源半环理论(Part2)

文章目录

  • 3.   \textbf{3. } 3. 处理递归查询: 基于 Datalog \textbf{Datalog} Datalog
    • 3.1.   \textbf{3.1. } 3.1. 关于 Datalog \textbf{Datalog} Datalog
      • 3.1.1.   \textbf{3.1.1. } 3.1.1.  Datalog \textbf{Datalog} Datalog基本结构
      • 3.1.2.   Datalog \textbf{3.1.2. }\textbf{Datalog} 3.1.2. Datalog的两种查询
      • 3.1.3.   Datalog \textbf{3.1.3. }\textbf{Datalog} 3.1.3. Datalog的两种等价语义
    • 3.2.   K - \textbf{3.2. }\boldsymbol{K\textbf{-}} 3.2. K-关系上的 Datalog \textbf{Datalog} Datalog
      • 3.2.1.   Datalog \textbf{3.2.1. }\textbf{Datalog} 3.2.1. Datalog的证明论半环语义
      • 3.2.2.   Datalog \textbf{3.2.2. }\textbf{Datalog} 3.2.2. Datalog的不动点论半环语义
    • 3.3.   \textbf{3.3. } 3.3. 从溯源多项式 → \textbf{→} 溯源正式幂级数
      • 3.3.1.   \textbf{3.3.1. } 3.3.1. 为何溯源多项式不够
      • 3.3.2.   \textbf{3.3.2. } 3.3.2. 形式幂级数半环
  • 4.   \textbf{4. } 4. 溯源级数计算与应用
    • 4.1.   \textbf{4.1. } 4.1. 溯源级数计算
    • 4.2.   \textbf{4.2. } 4.2. 要点的补充(从这开始放水了,都是些啥啊)
      • 4.2.1.   \textbf{4.2.1. } 4.2.1.  All-Tree \textbf{All-Tree} All-Tree的再思考
      • 4.2.2.   \textbf{4.2.2. } 4.2.2. 查询包含

原文

3.   \textbf{3. } 3. 处理递归查询: 基于 Datalog \textbf{Datalog} Datalog

3.1.   \textbf{3.1. } 3.1. 关于 Datalog \textbf{Datalog} Datalog

3.1.1.   \textbf{3.1.1. } 3.1.1.  Datalog \textbf{Datalog} Datalog基本结构

1️⃣事实 (Fact) \text{(Fact)} (Fact)

  1. 事实:数据库中现存的数据(即具体的一行元组),写作关系名('常量1', '常量2', ...)
    • 推导事实:即不存在于数据库当中,但是可以从现有事实按照规则推导出来
  2. 补充:存放事实的数据库叫外延数据库,存放推导事实的叫内涵数据库

2️⃣规则 (Rule) \text{(Rule)} (Rule)

  1. 含义:从事实(现存于数据库中的 / / /从已知事实推导而来的)中,推导出新事实的逻辑
  2. 结构:Head:-BodyHead:-atom1,atom2,...
    • Head是想要输出的结果,如EmpDept(Name, DeptName)
    • atom是查询条件,相邻atom有相同变量可实现join,如E(Eid,Name,Did),D(Did,Dpt)

3️⃣谓词 (Predicates) \text{(Predicates)} (Predicates)

  1. 含义:就是关系名,如EmpDept(Name, DeptName)中的EmpDept
  2. 种类:按照是否作为数据库中的数据源
    • EDB \text{EDB} EDB谓词:从不出现在任何规则的head部分的谓词,充当纯粹的数据源
    • IDB \text{IDB} IDB谓词:至少在一条规则的head部分出现过,代表了被推导而出的规则

3.1.2.   Datalog \textbf{3.1.2. }\textbf{Datalog} 3.1.2. Datalog的两种查询

1️⃣非递归:合取查询 (ConjunctiveQuery) \text{(ConjunctiveQuery)} (ConjunctiveQuery)

  1. 自然连接:若 A A A表中有 n n n列分别和 B B B表中的 n n n列同名,则当两表中这 n n n列都相同时才进行连接
    Eid Name Did 1 张三 101 2 李四 102 3 王五 104   ⋈   Did Dpt 101 市场部 102 技术部   →   Did Eid Name Dpt 101 1 张三 市场部 102 2 李四 技术部 \begin{array}{|c|c|c|}\hline\text{\textbf{Eid}}&\text{\textbf{Name}}&\text{\textbf{Did}}\\\hline1&\text{张三}&101\\2&\text{李四}&102\\3&\text{王五}&104\\\hline\end{array}{\,\bowtie\,}\begin{array}{|c|c|}\hline\text{\textbf{Did}}&\text{\textbf{Dpt}}\\\hline101&\text{市场部}\\102&\text{技术部}\\\hline\end{array}{\,\to\,}\begin{array}{|c|c|c|c|}\hline\text{\textbf{Did}}&\text{\textbf{Eid}}&\text{\textbf{Name}}&\text{\textbf{Dpt}}\\\hline101&1&\text{张三}&\text{市场部}\\102&2&\text{李四}&\text{技术部}\\\hline\end{array} Eid123Name张三李四王五Did101102104Did101102Dpt市场部技术部Did101102Eid12Name张三李四Dpt市场部技术部
  2. 合取查询结构:Head:-BodyHead:-atom1,atom2,...即同时满足若干原子条件时,输出结果
  3. 合取查询示例:合取查询除了囊括了自然连接,还可以隐式地进行选择和投影
    操作 合取查询
    同自然连接 R(Eid,Name,Did,Dpt):-E(Eid,Name,Did),D(Did,Dpt)
    对结果投影 R(Name):-E(Eid,Name,Did),D(Did,Dpt)
    对原子选择 R(Eid,Name,Did,Dpt):-E(Eid,Name,Did),D(Did,Dpt),Did>100
    更复杂( θ \theta θ)连接 R(Eid,Name,Did,Dpt):-E(Eid,Name,Did),D(Did,Dpt),Eid
    • 对于head只能进行投影操作,而对body中的每个atom只能进行选择操作(当然还包括连接)
    • 对结果不进行任何投影的叫完全合取查询,对结果投影去除某些列的即为非完全合取查询

2️⃣递归查询:对合取查询的深化

  1. 基本思想:允许头部定义的谓词再次出现在规则的体部,示例如下‘
    Anc(x,y):-Dad(x,y).
    %一个合取查询,如果x是y的父母,那么x就是y的祖先
       
    Anc(x,y):-Dad(x,z),Anc(z,y).
    %开始递归,body部分出现了head中定义的谓词,即如果x是z父母及z是y祖先,则x也是y祖先  
    
  2. 递归计算:迭代与不动点,以免陷入死循环
    轮次 输入 操作(应用什么规则) Anc
    0 0 0 N/A \text{N/A} N/A N/A \text{N/A} N/A Anc-0(空)
    1 1 1 Anc-0 基础Anc(x,y):-Dad(x,y) Anc-1(新增父子关系)
    2 2 2 Anc-1 递归Anc(x,y):-Dad(x,y),Anc-1(x,y) Anc-2(新增祖父子关系)
    3 3 3 Anc-2 递归Anc(x,y):-Dad(x,y),Anc-2(x,y) Anc-3(新增曾祖父子关系)
    • 迭代终止:一直到Anc表内不再新增元素时迭代结束,此时的Anc表叫做不动点

3.1.3.   Datalog \textbf{3.1.3. }\textbf{Datalog} 3.1.3. Datalog的两种等价语义

1️⃣证明论语义:从结论倒推证明过程

  1. 推导树:根是等待被证明的结论,叶子是基础事实 EDB \text{EDB} EDB,中间结构反应了按照规则推导的过程
    规则: Grandparent('A','C') :- Parent('A','B'), Parent('B','C')
    
    推导:  Grandparent('A','C')            <-- 结论(根)
               /           \
        Parent('A','B')  Parent('B','C')  <-- 证据集合(叶子)
             (证据1)         (证据2)
    
    • 整体而言,一颗推导树代表了从基础事实(叶节点),推导到最终结论(根节点)的全部过程
  2. 推导:推导树中自上而下的过程
    • 开始:从根节点处的给定事实 R ( A 1 , A n ) R(A_1,A_n) R(A1,An)出发
    • 倒推:反向应用规则,直到所有分支都归结为基础事实(叶节点)为止
  3. 语义:事实 R ( A 1 , A n ) R(A_1,A_n) R(A1,An)成立,当且仅当至少存在一颗 A 1 A_1 A1 A n A_n An的推导树

2️⃣不动点语义:从起点试图推导到结论

  1. 要素:外延数据库 EDB \text{EDB} EDB(基础事实),内涵数据库 IDB \text{IDB} IDB(导出事实),立即后果算子 T P T_P TP(每部的推导)
  2. 推导:给定基础事实 EDB \text{EDB} EDB IDB k + 1 = IDB k ∪ T P ( EDB ∪ IDB k ) \text{IDB}_{k+1}{=}\text{IDB}_k{\cup}T_P(\text{EDB}{\cup}\text{IDB}_k) IDBk+1=IDBkTP(EDBIDBk)
    • 开始:推导事实集初始为空,即 IDB 0 = ∅ \text{IDB}_0{=}\varnothing IDB0=
    • 一轮:输入所有已知的事实的可达点,即 IDB 1 = T P ( EDB ) \text{IDB}_1{=}T_P(\text{EDB}) IDB1=TP(EDB)
    • 二轮:上轮结果 + + +(上轮结果 ∪ \cup 基础点)的可达点,即 IDB 2 = IDB 1 ∪ T P ( EDB ∪ IDB 1 ) \text{IDB}_{2}{=}\text{IDB}_1{\cup}T_P(\text{EDB}{\cup}\text{IDB}_1) IDB2=IDB1TP(EDBIDB1)
    • 三轮:上轮结果 + + +(上轮结果 ∪ \cup 基础点)的可达点,即 IDB 3 = IDB 2 ∪ T P ( EDB ∪ IDB 2 ) \text{IDB}_{3}{=}\text{IDB}_2{\cup}T_P(\text{EDB}{\cup}\text{IDB}_2) IDB3=IDB2TP(EDBIDB2)
    • n n n轮:一直迭代到 IDB k + 1 = IDB k \text{IDB}_{k+1}{=}\text{IDB}_{k} IDBk+1=IDBk,输出最终收敛的 IDB k \text{IDB}_{k} IDBk,即最小不动点
  3. 语义:从基础事实出发,不断地利用规则推导,得到所有可能推导出的事实

3.2.   K - \textbf{3.2. }\boldsymbol{K\textbf{-}} 3.2. K-关系上的 Datalog \textbf{Datalog} Datalog

3.2.1.   Datalog \textbf{3.2.1. }\textbf{Datalog} 3.2.1. Datalog的证明论半环语义

1️⃣ ω - {\omega}\textbf{-} ω-连续半环是什么:具备完备性和连续性的半环

  1. 前置分析:为何要 ω - {\omega}\textbf{-} ω-连续半环 → {\to} 能处理无穷推导,并能囊括包语义
    • 无穷推导:当 Datalog \text{Datalog} Datalog出现递归时,可能会产生无穷推导,进而结果的注释值等于无穷 ∉ K {\notin}K /K
    • 封闭半环:可以处理无限和,但加法必须是幂等的(如 a ⊕ a = a a{\oplus}a{=}a aa=a),这与包语义的如 1 + 1 = 2 1{+}1{=}2 1+1=2冲突
  2. 前置概念:考虑半环 ( K , ⊕ , ⊗ , 0 , 1 ) (K,{\oplus},{\otimes},0,1) (K,,,0,1),以及 a 1 , a 2 , . . . ∈ K a_1,a_2,...{\in}K a1,a2,...K
    • 序的定义:对于 a 1 , a 2 ∈ K a_1,a_2{\in}K a1,a2K a 1 ≤ a 2 a_1{\leq}a_2 a1a2等价于存在 x ∈ K x{\in}K xK使 a 1 ⊕ x = a 2 a_1{\oplus}x{=}a_2 a1x=a2
    • ω - {\omega}\textbf{-} ω-链是啥:由序关系 ≤ \leq 链接的无限序列 ⟨ a 0 , a 1 , . . . ⟩ \langle{}a_0,a_1,...\rangle{} a0,a1,...,即满足 a 0 ≤ a 1 ≤ . . . a_0{\leq}a_1{\leq}... a0a1...的链
  3. ω - {\omega}\textbf{-} ω-完备性:保证半环 ( K , ⊕ , ⊗ , 0 , 1 ) (K,{\oplus},{\otimes},0,1) (K,,,0,1)上无限递归的过程,也有一个确定的(包括 ∞ \infty )结果
    • 完备:半环 K K K是完备的,即任意 ω - {\omega}\textbf{-} ω- ⟨ a 0 , a 1 , . . . ⟩ \langle{}a_0,a_1,...\rangle{} a0,a1,...都有一最小上界 a sup ∈ K a_{\text{sup}}{\in}K asupK,即 lim ⁡ i → ∞ a i = a sup \displaystyle\lim_{i{\to}\infty}a_i{=}a_{\text{sup}} ilimai=asup
    • 反例:包 ( N , + , × , 0 , 1 ) (\mathbb{N},{+},{\times},0,1) (N,+,×,0,1)中自然数 N \mathbb{N} N不具备完备性,如构造 ω - {\omega}\textbf{-} ω- ⟨ 0 , 1 , 2 , . . . ⟩ \langle{}0,1,2,...\rangle{} 0,1,2,...不可能存在上界
    • 转化:对于那些没有上界的的 ω - {\omega}\textbf{-} ω-链,强行让 ∞ ∈ K \infty{\in}K K于是 ∞ \infty 就是其最小上界
  4. ω - {\omega}\textbf{-} ω-连续性:可将 ⊗ \otimes 分配到无限求和中 a ⊗ ( ∑ i = 0 ∞ b i ) = ∑ i = 0 ∞ ( a ⊗ b i ) \displaystyle{}a{\otimes}\left(\sum_{i=0}^{\infty} b_i\right){=}\sum_{i=0}^{\infty}\left(a{\otimes}b_i\right) a(i=0bi)=i=0(abi),即分配律在处理无穷和时仍有效
  5. 示例:几个主要的 ω - {\omega}\textbf{-} ω-连续半环
    半环类型 ( K , ⊕ , ⊗ , 0 , 1 ) \boldsymbol{(K,{\oplus},{\otimes},0,1)} (K,,,0,1) 为何是 ω - \boldsymbol{\omega}\textbf{-} ω-连续
    布尔 ( B , ∨ , ∧ , false , true ) (B,{\lor},{\land},\text{false},\text{true}) (B,,,false,true) false ≤ true \text{false}{\leq}\text{true} falsetrue就是所有的 ω - {\omega}\textbf{-} ω-链,必有上界
    布尔式 ( PosB ( B ) , ∨ , ∧ , false , true ) (\text{PosB}(B),{\lor},{\land},\text{false},\text{true}) (PosB(B),,,false,true) 假定布尔变量 B B B有限, PosB ( B ) \text{PosB}(B) PosB(B)也有限(有上界)
    ( N ∞ , + , × , 0 , 1 ) (\mathbb{N}^{\infty},{+},{\times},0,1) (N,+,×,0,1) N \mathbb{N} N本身是不完备的,但是如上所说强行加入了 ∞ \infty
    热带 ( N ∞ , min ⁡ , + , ∞ , 0 ) (\mathbb{N}^{\infty},{\min},{+},{\infty},0) (N,min,+,,0) 同上,此外这个环描述的其实是最短路径优化
    幂集 ( P ( Ω ) , ∪ , ∩ , ∅ , Ω ) (P(\Omega),{\cup},{\cap},{\varnothing},\Omega) (P(Ω),,,,Ω) 若事件空间 Ω \Omega Ω有限,其幂集 P ( Ω ) P(\Omega) P(Ω)也有限(有上界)
    模糊 ( [ 0 , 1 ] , max ⁡ , min ⁡ , 0 , 1 ) ([0,1],{\max},{\min},{0},1) ([0,1],max,min,0,1) [ 0 , 1 ] [0,1] [0,1]必定有最小上界 1 1 1,该环可用来描述可能性

2️⃣ Datalog \text{Datalog} Datalog的证明论半环语义: q ( R ) ( t ) = ∑ τ  yields  t ( ∏ t ′ ∈  leaves  ( τ ) R ( t ′ ) ) \displaystyle{}q(R)(t){=}\sum_{\tau\text { yields } t}\left(\prod_{t^{\prime}{\in}\text { leaves }(\tau)} R\left(t^{\prime}\right)\right) q(R)(t)=τ yields t t leaves (τ)R(t)

  1. 含义:在 ω - {\omega}\textbf{-} ω-连续半环上,求一个输出元组 t t t的注释值时,遵循以下步骤
    • 第一步:先找出所有能推导出 t t t的语法树,记录每个推导树的所有叶子节点的注释值
    • 第二步:求每个推导树的叶节点注释值的积,再将所有语法树的积相加,极为 t t t的注释值
  2. 非递归:在环 ( N ∞ , + , × , 0 , 1 ) (\mathbb{N}^{\infty},{+},{\times},0,1) (N,+,×,0,1)上,非递归规则 Q ( x , y ) :- R ( x , z ) , R ( z , y ) Q(x,y)\text{:-}R(x,z),R(z,y) Q(x,y):-R(x,z),R(z,y),即 Q = R ⋈ R Q{=}R{\bowtie}R Q=RR
    x z Anno. a a 2 a b 3 b b 4   ⋈   z y Anno. a a 2 a b 3 b b 4   =   x y Anno. a a 2 × 2 a b 2 × 3 + 3 × 4 b b 4 × 4 \begin{array}{|c|c|c|}\hline \textbf{x}&\textbf{z}&\textbf{Anno.}\\\hline\hline a&a&2\\\hline a&b&3\\\hline b&b&4\\\hline \end{array}{\,\bowtie\,}\begin{array}{|c|c|c|}\hline \textbf{z}&\textbf{y}&\textbf{Anno.}\\\hline\hline a&a&2\\\hline a&b&3\\\hline b&b&4\\\hline \end{array}{\,=\,}\begin{array}{|c|c|l|}\hline \textbf{x}&\textbf{y}&\textbf{Anno.}\\\hline\hline a&a&2{\times}2\\\hline a&b&2{\times}3{+}3{\times}4\\\hline b&b&4{\times}4\\\hline \end{array} xaabzabbAnno.234zaabyabbAnno.234=xaabyabbAnno.2×22×3+3×44×4
    • 考虑 Q ( a , b ) :- R ( a , a ) , R ( a , b ) Q(a,b)\text{:-}R(a,a),R(a,b) Q(a,b):-R(a,a),R(a,b)所代表的推导树, R ( a , a ) , R ( a , b ) R(a,a),R(a,b) R(a,a),R(a,b)注释之积为 2 × 3 2{\times}3 2×3
    • 考虑 Q ( a , b ) :- R ( a , b ) , R ( b , b ) Q(a,b)\text{:-}R(a,b),R(b,b) Q(a,b):-R(a,b),R(b,b)所代表的推导树, R ( a , b ) , R ( b , b ) R(a,b),R(b,b) R(a,b),R(b,b)注释之积为 3 × 4 3{\times}4 3×4
  3. 递归:在环 ( N ∞ , + , × , 0 , 1 ) (\mathbb{N}^{\infty},{+},{\times},0,1) (N,+,×,0,1)上,递归规则 { Q ( x , y ) :- R ( x , y ) Q ( x , y ) :- Q ( x , z ) , Q ( z , y ) \begin{cases}Q(x,y)\text{:-}R(x,y)\\Q(x,y)\text{:-}Q(x,z),Q(z,y)\end{cases} {Q(x,y):-R(x,y)Q(x,y):-Q(x,z),Q(z,y),即 Q = R n Q{=}R^n Q=Rn(自 Join \text{Join} Join无数次)
    x z Anno. a a 2 a b 3 b b 4   ⋈   z y Anno. a a 2 a b 3 b b 4   ⋈   . . .   =   x y Anno. a a ∞ a b ∞ b b ∞ \begin{array}{|c|c|c|}\hline \textbf{x}&\textbf{z}&\textbf{Anno.}\\\hline\hline a&a&2\\\hline a&b&3\\\hline b&b&4\\\hline \end{array}{\,\bowtie\,}\begin{array}{|c|c|c|}\hline \textbf{z}&\textbf{y}&\textbf{Anno.}\\\hline\hline a&a&2\\\hline a&b&3\\\hline b&b&4\\\hline \end{array}{\,\bowtie\,}...{\,=\,}\begin{array}{|c|c|c|}\hline \textbf{x}&\textbf{y}&\textbf{Anno.}\\\hline\hline a&a&{\infty}\\\hline a&b&{\infty}\\\hline b&b&{\infty}\\\hline \end{array} xaabzabbAnno.234zaabyabbAnno.234...=xaabyabbAnno.
    • Q ( a , b ) Q(a,b) Q(a,b)利用规则 Q ( x , y ) :- Q ( x , z ) , Q ( z , y ) Q(x,y)\text{:-}Q(x,z),Q(z,y) Q(x,y):-Q(x,z),Q(z,y),得到推导树倒数第二层节点
      Q(a,b)                      | Q(a,b)
      Q(a,a),Q(a,b)               | Q(a,b),Q(b,b)
      Q(a,a),Q(a,a),Q(a,b)        | Q(a,b),Q(b,b),Q(b,b)
      Q(a,a),Q(a,a),Q(a,a),Q(a,b) | Q(a,b),Q(b,b),Q(b,b),Q(b,b)
      ........                    | ........
      
    • 再利用规则 Q ( x , y ) :- R ( x , y ) Q(x,y)\text{:-}R(x,y) Q(x,y):-R(x,y),得到推导树的叶子节点
      R(a,b)                      | R(a,b)
      R(a,a),R(a,b)               | R(a,b),R(b,b)
      R(a,a),R(a,a),R(a,b)        | R(a,b),R(b,b),R(b,b)
      R(a,a),R(a,a),R(a,a),R(a,b) | R(a,b),R(b,b),R(b,b),R(b,b)
      ........                    | ........
      
    • 合并每个推导树叶节点注释的累积,结果必定是 ∞ \infty ,然而这在 ω - {\omega}\textbf{-} ω-连续半环中是合法的结果

3️⃣ Datalog \text{Datalog} Datalog的证明论半环语义的性质

  1. 合理性保证:对一个行数有限的数据库 R R R,进行 Datalog \text{Datalog} Datalog查询的结果 q ( R ) q(R) q(R)的行数也有限
  2. 非递归等价性:对于 K - K\text{-} K-关系上的查询,以下两者得到的计算结果相同
    • R A + \mathcal{RA}^+ RA+视角:视查询为 Join/Union \text{Join/Union} Join/Union等算子构成的算式,用关系代数半环语义计算注释值
    • Datalog \text{Datalog} Datalog视角:将查询视作若干非递归的 Datalog \text{Datalog} Datalog规则,用 Datalog \text{Datalog} Datalog半环语义计算注释值
  3. 语义一致性:以下两种方式查询结果一致
    • 本文 Datalog \text{Datalog} Datalog语义:用布尔半环注释数据库,用 Datalog \text{Datalog} Datalog半环语义计算注释,保留为 true \text{true} true
    • 传统 Datalog \text{Datalog} Datalog语义:普通的 Datalog \text{Datalog} Datalog的执行所得到的元组

4️⃣ Datalog \text{Datalog} Datalog的证明论半环语义的局限

  1. 局限:虽然这种半环语义是良定义的,但执行层面不可能枚举无限种可能的推导树
  2. 解决:引入完全等价的不动点语义,将 Datalog \text{Datalog} Datalog规则翻译成代数方程,自底向上求解不动点

3.2.2.   Datalog \textbf{3.2.2. }\textbf{Datalog} 3.2.2. Datalog的不动点论半环语义

1️⃣将 Datalog \text{Datalog} Datalog的逻辑规则转化为方程组(代数系统)

  1. 已知量 & \& &未知数分配:已知量即基础事实 R R R中所有的注释值,未知量即求解结果 Q Q Q的所有注释值
  2. 依据 Datalog \text{Datalog} Datalog规则建立方程:在环 ( N ∞ , + , × , 0 , 1 ) (\mathbb{N}^{\infty},{+},{\times},0,1) (N,+,×,0,1)上,考虑规则 { Q ( x , y ) :- R ( x , y ) Q ( x , y ) :- Q ( x , z ) , Q ( z , y ) \begin{cases}Q(x,y)\text{:-}R(x,y)\\Q(x,y)\text{:-}Q(x,z),Q(z,y)\end{cases} {Q(x,y):-R(x,y)Q(x,y):-Q(x,z),Q(z,y)
    R   =   a b m a c n c b p b d r d d s   和   Q   =   a b x a c y c b z b d u d d v a d w   ⇒ { x = m + y z y = n z = p u = r + u v v = s + v 2 w = x u + w v R{\,=\,}\begin{array}{|c|c|c|}\hline \hline a&b&m\\\hline a&c&n\\\hline c&b&p\\\hline b&d&r\\\hline d&d&s\\\hline \end{array}{\,和\,}Q{\,=\,}\begin{array}{|c|c|c|}\hline \hline a&b&\textbf{x}\\\hline a&c&\textbf{y}\\\hline c&b&\textbf{z}\\\hline b&d&\textbf{u}\\\hline d&d&\textbf{v}\\\hline a&d&\textbf{w}\\\hline \end{array}{\,\xRightarrow{}}\begin{cases} \mathbf{x}{=}m{+}\mathbf{y} \mathbf{z} \\ \mathbf{y}{=}n \\ \mathbf{z}{=}p \\ \mathbf{u}{=}r{+}\mathbf{u} \mathbf{v} \\ \mathbf{v}{=}s{+}\mathbf{v}^2 \\ \mathbf{w}{=}\mathbf{x} \mathbf{u}{+}\mathbf{w} \mathbf{v}\end{cases} R=aacbdbcbddmnprsQ=aacbdabcbdddxyzuvw x=m+yzy=nz=pu=r+uvv=s+v2w=xu+wv
    • 考虑 Q ( x , y ) :- R ( x , y ) Q(x,y)\text{:-}R(x,y) Q(x,y):-R(x,y):则 Q ( a , b ) Q(a,b) Q(a,b)可由 R ( a , b ) R(a,b) R(a,b)生成,于是 x = m + ⋯ \mathbf{x}{=}m{+}{\cdots} x=m+
    • 考虑 Q ( x , y ) :- Q ( x , z ) , Q ( z , y ) Q(x,y)\text{:-}Q(x,z),Q(z,y) Q(x,y):-Q(x,z),Q(z,y):则 Q ( a , b ) Q(a,b) Q(a,b)可由 Q ( a , c ) Q(a,c) Q(a,c) Q ( c , b ) Q(c,b) Q(c,b)生成,于是 x = m + y z \mathbf{x}{=}m{+}\mathbf{yz} x=m+yz

2️⃣方程的求解:不动点迭代法

  1. 初始化: ( x , y , z , u , v , w ) = ( 0 , 0 , 0 , 0 , 0 , 0 ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}){=}(0,0,0,0,0,0) (x,y,z,u,v,w)=(0,0,0,0,0,0)
  2. 第一轮: ( x , y , z , u , v , w ) = ( 0 , 0 , 0 , 0 , 0 , 0 ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}){=}(0,0,0,0,0,0) (x,y,z,u,v,w)=(0,0,0,0,0,0)带入右边 → {\to} 左边 ( x , y , z , u , v , w ) = ( m , n , p , r , s , 0 ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}){=}(m,n,p,r,s,0) (x,y,z,u,v,w)=(m,n,p,r,s,0)
  3. 第二轮: ( x , y , z , u , v , w ) = ( m , n , p , r , s , 0 ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}){=}(m,n,p,r,s,0) (x,y,z,u,v,w)=(m,n,p,r,s,0)带入右边 → {\to} 左边 ( x , y , z , u , v , w ) = ( m + n p , n , . . . ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}){=}(m{+}np,n,...) (x,y,z,u,v,w)=(m+np,n,...)
  4. n n n轮:不断用方程组迭代,至 ( x , y , z , u , v , w ) (\textbf{x},\textbf{y},\textbf{z},\textbf{u},\textbf{v},\textbf{w}) (x,y,z,u,v,w)不变(即为不动点),结果如下
    Q   =   a b m + n p a c n c b p b d r ( 1 + v + v 2 + ⋯ ) d d s + s 2 + 2 s 3 + 5 s 4 + ⋯ a d r ( m + n p ) ( 1 + v + v 2 + ⋯ ) 2   → 克林闭包 v ∗ = 1 + v + v 2 + ⋯   Q   =   a b m + n p a c n c b p b d r v ∗ d d s + s 2 + 2 s 3 + 5 s 4 + ⋯ a d r ( m + n p ) ( v ∗ ) 2 Q{\,=\,}\begin{array}{|c|c|l|}\hline \hline a&b&m{+}np\\\hline a&c&n\\\hline c&b&p\\\hline b&d&r(1{+}v{+}v^2{+}{\cdots})\\\hline d&d&s{+}s^2{+}2s^3{+}5s^4{+}{\cdots}\\\hline a&d&r(m{+}np)(1{+}v{+}v^2{+}{\cdots})^2\\\hline \end{array}{\,\xrightarrow[克林闭包]{v^*{=}1{+}v{+}v^2{+}{\cdots}}\,}Q{\,=\,}\begin{array}{|c|c|l|}\hline \hline a&b&m{+}np\\\hline a&c&n\\\hline c&b&p\\\hline b&d&rv^*\\\hline d&d&s{+}s^2{+}2s^3{+}5s^4{+}{\cdots}\\\hline a&d&r(m{+}np)(v^*)^{2}\\\hline \end{array} Q=aacbdabcbdddm+npnpr(1+v+v2+)s+s2+2s3+5s4+r(m+np)(1+v+v2+)2v=1+v+v2+ 克林闭包Q=aacbdabcbdddm+npnprvs+s2+2s3+5s4+r(m+np)(v)2

3️⃣对不动点语义的分析

  1. 语义等价性:由 Datalog \text{Datalog} Datalog两种语义(证明论和不动点)得到的查询结果是完全等价的
  2. 迭代的保证:在 ω - \omega\text{-} ω-连续半环上,为何不动点迭代法是有效的
    • 单调性:由于是正关系代数,方程中只有加乘,故每轮不动点迭代都递增(如 x 1 ≤ x 2 ≤ x 3 . . . \textbf{x}_1{\leq}\textbf{x}_2{\leq}\textbf{x}_3... x1x2x3...)
    • 完备性:保证了变量在不动点迭代过程中,即使不断递增但还是会有一个最小上界(最小不动点)
    • 连续性:应用克林(克林闭包的克林)不动点定理的关键,即迭代停止处就是索要的最小不动点
  3. 解的含义:以一个半环的视角,以 Q ( a , b ) Q(a,b) Q(a,b)的注释 m + n p m{+}np m+np为例
    • 包半环: m / n / p m/n/p m/n/p来自 a → b / a → c / c → b a{\to}b/a{\to}c/c{\to}b ab/ac/cb的路径数, n p np np积则为 a → c → b a{\to}c{\to}b acb的路径数
    • 溯源半环: m m m表示 Q ( a , b ) Q(a,b) Q(a,b)一部分直接来自 R ( a , b ) R(a,b) R(a,b) n p np np表示另一部分来自 R ( a , c ) ⋈ R ( c , b ) R(a,c){\bowtie}R(c,b) R(a,c)R(c,b)
  4. 关于无穷大:良性与恶性的递归
    递归 含义 解结构
    线性 左边只以一次方出现在右边,如 u = r + u v \mathbf{u}{=}r{+}\mathbf{u} \mathbf{v} u=r+uv 链式结构,解呈几何级数
    非线性 左边以更高次方出现在右边,如 v = s + v 2 \mathbf{v}{=}s{+}\mathbf{v}^2 v=s+v2 组合结构 (如二叉树),解呈复杂级数

4️⃣ Datalog \text{Datalog} Datalog上的因子分解定理

  1. 内容: q ( h ( R ) ) = h ( q ( R ) ) q\left( {h\left( R\right) }\right){=}h\left( {q\left( R\right) }\right) q(h(R))=h(q(R))
    • 要素: R R R为原始数据库(注释为溯源多项式), h h h为同态函数(翻译多项式), q q q Datalog \text{Datalog} Datalog查询
    • 含义:先翻译注释再查询即 q ( h ( R ) ) q\left( {h\left( R\right) }\right) q(h(R)),等价于先查询再翻译查询结果注释即 h ( q ( R ) ) h\left( {q\left( R\right) }\right) h(q(R))
  2. 意义:一种通用性的宣言,即溯源半环上的 Datalog \text{Datalog} Datalog查询是一种通用模型

3.3.   \textbf{3.3. } 3.3. 从溯源多项式 → \textbf{→} 溯源正式幂级数

3.3.1.   \textbf{3.3.1. } 3.3.1. 为何溯源多项式不够

1️⃣无限系数情形:考虑单位循环递归(一种特殊的线性递归)

  1. 示例:考虑单位规则循环 { Q ( x , y ) :- R ( x , y ) R ( x , y ) :- Q ( x , y ) \begin{cases}Q(x,y)\text{:-}R(x,y)\\R(x,y)\text{:-}Q(x,y)\end{cases} {Q(x,y):-R(x,y)R(x,y):-Q(x,y) Q ( a , b ) Q(a,b) Q(a,b)推导树如下
    Q(a, b) <- R(a, b)
    Q(a, b) <- R(a, b) <- Q(a, b) <- R(a, b)
    Q(a, b) <- R(a, b) <- Q(a, b) <- R(a, b) <- Q(a, b) <- R(a, b)
    ......
    
  2. 特点:有无穷多颗推导树,每颗推导树的叶节点的积都一样,也就是 ∞ × N \infty{\times}N ×N结构(系数为无穷)
  3. 局限:对于多项式的一项,其系数并不能无限

2️⃣无限项数情形:线性或非线性递归

  1. 示例:之前讨论的例子中解得的 v = s + s 2 + 2 s 3 + 5 s 4 + ⋯ \textbf{v}{=}s{+}s^2{+}2s^3{+}5s^4{+}{\cdots} v=s+s2+2s3+5s4+ u = r ( 1 + v + v 2 + ⋯ ) \textbf{u}{=}r(1{+}v{+}v^2{+}{\cdots}) u=r(1+v+v2+)
  2. 局限:多项式并不允许表示无限多个项,除非用级数

3.3.2.   \textbf{3.3.2. } 3.3.2. 形式幂级数半环

1️⃣ Datalog \text{Datalog} Datalog溯源半环

  1. 是啥:将溯源多项式半环 ( N [ X ] , + , × , 0 , 1 ) (\mathbb{N}[X],+,\times,0,1) (N[X],+,×,0,1) N [ X ] \mathbb{N}[X] N[X]换成 N ∞ [ [ X ] ] {\mathbb{N}^{\infty}[[X]]} N[[X]]
    结构 含义
    X X X 数据库中每个元组的 ID \text{ID} ID,在溯源数据库中就是元组的注释,记录参与贡献的元组
    [ [   ] ] [[\,]] [[]] 表示可以放入无穷多的项,区别于多项式的 [    ] [\,\,] []只能放入有限多的项
    N ∞ \mathbb{N}^{\infty} N 对自然数的扩展,认为无穷也是一种自然数,一起可以作为每一项的系数
  2. 性质:任然是一个 ω - {\omega}\textbf{-} ω-连续半环,故不动点求解任然适用

2️⃣ N ∞ [ [ X ] ] {\mathbb{N}^{\infty}[[X]]} N[[X]]的理论保证

  1. 向下兼容:形式幂级数囊括了多项式,在 N [ X ] \mathbb{N}[X] N[X]上执行与按同样方式在 N ∞ [ [ X ] ] {\mathbb{N}^{\infty}[[X]]} N[[X]]上执行结果一样
  2. 因子分解:和溯源多项式半环上的 Datalog \text{Datalog} Datalog因子分解一样, q ( h ( R ) ) = h ( q ( R ) ) q\left( {h\left( R\right) }\right){=}h\left( {q\left( R\right) }\right) q(h(R))=h(q(R))
    • 要素: R R R为原始数据库(注释为溯源形式幂级数), h h h为同态函数(翻译幂级数), q q q Datalog \text{Datalog} Datalog查询
    • 保证:一定存在至少一个 h h h,可将溯源形式幂级数,翻译成其它注释值(如布尔 / / /数目等)
    • 含义:先翻译注释再查询即 q ( h ( R ) ) q\left( {h\left( R\right) }\right) q(h(R)),等价于先查询再翻译查询结果注释即 h ( q ( R ) ) h\left( {q\left( R\right) }\right) h(q(R))
  3. 可分析性:只有一种情况溯源形式幂级数才会出现无穷系数,即单位规则循环
    • 所谓单位:Body只有一个atom,例如P:-Q
    • 所谓循环:即所有规则最后会成为一个环,如下三个例子
      R1 :- R2  |  R1 :- R2  |  R1 :- R2
      R2 :- R1  |  R2 :- R3  |  R2 :- R3
                   R3 :- R1  |  R3 :- R2
                             |  R2 :- R1
      

4.   \textbf{4. } 4. 溯源级数计算与应用

4.1.   \textbf{4.1. } 4.1. 溯源级数计算

1️⃣ All-Trees \text{All-Trees} All-Trees算法:通过让推导树自底向上构建实现的不动点计算,并判断溯源是否无限

  1. 初始:构建两个数据结构
    结构 作用 初始化输入什么
    白名单 T T T 存放当前已知的有限推导树 所有已知元组(只有一节的推导树)
    黑名单 T ∞ T^{\infty} T 存放已经确定的拥有无限推导树的元组
  2. 迭代:自底向上的搭建
    输入对象 操作 如果某元组匹配成功…
    T T T中所有树的根 匹配 Datalog \text{Datalog} Datalog规则 原有推导树的根找到其父节点,再向上生长一层
    T ∞ T^{\infty} T中所有元组 匹配 Datalog \text{Datalog} Datalog规则 原有元组就能无限推导,其父节点也必定可以无限推导
    • 二者迭代的结果,共同构成待筛选的推导树集(即使由 T ∞ T^{\infty} T迭代出来的仅两层的推导树必被简剪枝)
  3. 审查:对所有待筛选的推导树,自顶向下的检查
    检查对象 什么情况下推导树不能过审 解释
    根直接子节点 某树至少有一个根的直接子节点在 T ∞ T^{\infty} T 子节点可无穷推导,父节点也可
    每一层节点 在任意深度发现了与根节点一致的元组 构成循环,自身不断导出自身
    • 更新:将过审的推导树加入 T T T,不能过审的推导树的根节点加入到 T ∞ T^{\infty} T
  4. 停止:当 T / T ∞ T/T^{\infty} T/T的成员都不变化时
    • 输出:计算出元组的溯源多项式
      条件 元组的溯源结果(多项式)
      元组在 T ∞ T^{\infty} T ∞ \infty
      元组为 T T T中树的根 找到所有以该元组为根的推导树,计算每棵树叶子累乘,再将累乘累加
    • 补充:对于在 T ∞ T^{\infty} T中的元组,检测其溯源结果的无穷是哪一种
      无穷类型 环路的种类
      无穷多的项 元组对应推导树必定有环路,而且环路包含非单位规则(如a:-b,cc:-a)
      无穷的系数 元组对应推导树必定有环路,而且环路全为单位规则(如a:bb:-a)

2️⃣ M-C \text{M-C} M-C算法:深入某无限推导的元组 t t t,弄清其特定的单项式 μ \mu μ对注释值贡献了多少次(系数)

  1. 前置:用元组 - \text{-} -单项式对 ( t , μ ) (t,\mu) (t,μ)描述一类推导树
    • 结构: μ \mu μ是一个单项式,为推导树的叶节点的累乘,这些叶节点最终可导出 t t t
    • 种类:按照 μ \mu μ所代表的叶节点组合,有多少种方法可以推导出元组 t t t
      类型 特点 备注
      普通 ( t , μ ) (t,\mu) (t,μ) μ \mu μ的叶节点组合,仅有有限种方法导出 t t t t t t的注释中, μ \mu μ项系数有限
      无穷 ( t ′ , μ ′ ) (t',\mu') (t,μ) μ ’ \mu’ μ的叶节点组合,可有无限种方法导出 t ′ t' t t ′ t' t的注释中, μ ’ \mu’ μ项系数为 ∞ \infty
    • 补充:上章讨论过,只有出现单位规则循环时,幂级数才会有无穷系数,即才会有无穷 ( t ′ , μ ′ ) (t',\mu') (t,μ)
  2. 初始:对某可无穷推导元组的溯源幂级数,输入其中目标单项式 μ \mu μ,构建两个数据结构
    结构 存放内容 初始化输入什么
    白名单 T T T 自底向上生长,有潜力得到 μ \mu μ的推导树的集合 μ \mu μ的组成,如 μ = r s 2 \mu{=}rs^2 μ=rs2 T = { r , s } T{=}\{r,s\} T={r,s}
    黑名单 P ∞ P^{\infty} P 目前已经发现的无穷元组 - \text{-} -单项式对 ( t ′ , μ ′ ) (t',\mu') (t,μ)
  3. 迭代:与 All-Trees \text{All-Trees} All-Trees类似
    • 生成:让 T T T中所有推导树根节点匹配 Datalog \text{Datalog} Datalog规则向上生长,可能引入不存在于 μ \mu μ中的叶节点
      情形 匹配的规则时…
      不引入新叶节点 规则的所有atom仅需 T T T中推导树的根节点
      需引入新叶节点 规则有的atom需要 T T T中推导树的根节点外的结点
    • 剪枝:处理引入的不存在于 μ \mu μ中的叶节点,以及过度引入的 μ \mu μ中的叶节点
      情形 剪枝条件 示例
      无中生有 推导树叶节点中有 μ \mu μ不包含的元素 μ = r s 2 \mu{=}rs^2 μ=rs2时,推导树叶节点含 p p p
      种类越界 推导树叶节点中某元素数量超过 μ \mu μ中的 μ = r s 2 \mu{=}rs^2 μ=rs2时,推导树叶节点含三个 s s s
  4. 检测:哪些元组的注释具有无穷系数
    检测方式 对于某推导树 ( t 0 , μ 0 ) \boldsymbol{(t_0,\mu_0)} (t0,μ0) P ∞ \boldsymbol{P^{\infty}} P操作
    继承检测 若其有某颗子树为 ( t ′ , μ ′ ) ∈ P ∞ (t',\mu'){\in}P^{\infty} (t,μ)P ( t 0 , μ 0 ) (t_0,\mu_0) (t0,μ0)塞入
    环路检测 若其从根结点 t 0 t_0 t0往下也有 t 0 t_0 t0(成环) ( t 0 , μ 0 ) (t_0,\mu_0) (t0,μ0)塞入
  5. 终止:由于搜索空间被 μ \mu μ严格限制算法必有限步终止,输出系数 C C C( t t t的注释中项 μ \mu μ的系数)
    情形 返回 C \boldsymbol{C} C的值
    目标 ( t , μ ) (t, \mu) (t,μ)不在 P ∞ P^\infty P C = T C{=}T C=T中所有符合 ( t , μ ) (t, \mu) (t,μ)的推导树的总数
    目标 ( t , μ ) (t, \mu) (t,μ) P ∞ P^\infty P C = ∞ C{=}{\infty} C=

4.2.   \textbf{4.2. } 4.2. 要点的补充(从这开始放水了,都是些啥啊)

4.2.1.   \textbf{4.2.1. } 4.2.1.  All-Tree \textbf{All-Tree} All-Tree的再思考

1️⃣ All-Trees \text{All-Trees} All-Trees算法对几种具体语义的处理

  1. 对包语义:天然可处理包语义,因为包的注释是自然数,对自然数进行无穷运算后得到的就是无穷
  2. 对其它语义:存在一定偏差,本质上源于幂等性
    • 对于布尔半环:由于布尔值 x ∨ x = x x{\lor}x{=}x xx=x,所以对布尔值的无穷运算还是布尔值,并不能用无穷表示
    • 对于幂集半环:由于事件 A ∪ A = A A{\cup}A{=}A AA=A,所以对事件的无穷运算还是事件,并不能用无穷表示

2️⃣ All-Trees \text{All-Trees} All-Trees算法的修改:使之能处理具有幂等性的语义

  1. 核心修改:重新定义新的推导树,考虑一类推导树 ( t , μ ) (t,\mu) (t,μ)
    • 修改前:根 t t t相同且叶累积 μ \mu μ相同但内部结构(推导路径)不同,则视作新的推导树
    • 修改后:根 t t t相同且叶累积 μ \mu μ相同则视作一类;仅 μ \mu μ更小(如 x y xy xy小于 x y z xyz xyz)才视作新(更好)的推导树
  2. 为何有效:吸收律 a + a × b = a a{+}a{\times}b{=}a a+a×b=a的体现
    • 去除冗余:选择尽可能小的 μ \mu μ以去除冗余信息,比如 x y xy xy就能导出 t t t,那还要 x y z xyz xyz的推导树干啥

4.2.2.   \textbf{4.2.2. } 4.2.2. 查询包含

1️⃣分配格是什么

  1. 格:即 ( L , ⊕ , ⊗ ) (L,{\oplus},{\otimes}) (L,,)的代数系统,满足交换律 / / /结合律,以及吸收率 { a ⊕ ( a ⊗ b ) = a a ⊗ ( a ⊕ b ) = a \begin{cases}a{\oplus}(a{\otimes}b){=}a\\a{\otimes}(a{\oplus}b){=}a\end{cases} {a(ab)=aa(ab)=a
  2. 分配格:在格的基础上,还满足分配律 { a ⊕ ( b ⊗ c ) = ( a ⊕ b ) ⊗ ( a ⊕ c ) a ⊗ ( b ⊕ c ) = ( a ⊗ b ) ⊕ ( a ⊗ c ) \begin{cases}a{\oplus}(b{\otimes}c){=}(a{\oplus}b){\otimes}(a{\oplus}c)\\a{\otimes}(b{\oplus}c){=}(a{\otimes}b){\oplus}(a{\otimes}c)\end{cases} {a(bc)=(ab)(ac)a(bc)=(ab)(ac)

2️⃣关于查询包含

  1. 定义: K - K\text{-} K-半环语义下查询 q 1 q_1 q1 q 2 q_2 q2包含(记作 q 1 ⊑ K q 2 q_1{\sqsubseteq_K}q_2 q1Kq2) ⇔ {\Leftrightarrow} 数据库 R R R中任意元组 t t t q 1 ( R ) ( t ) ≤ q 2 ( R ) ( t ) q_1(R)(t){\leq}q_2(R)(t) q1(R)(t)q2(R)(t)
  2. 示例:布尔半环中 false ≤ true \text{false}{\leq}\text{true} falsetrue,包中 ≤ \leq 就表示自然数的小于等于
  3. 性质:若 K - K\text{-} K-半环是一个分配格,查询是合区查询并集(多个 CQ \text{CQ} CQ or \text{or} or),则 q 1 ⊑ K q 2 q_1{\sqsubseteq_K}q_2 q1Kq2 q 1 ⊑ B q 2 q_1{\sqsubseteq_{\mathbb{B}}}q_2 q1Bq2等价

你可能感兴趣的:(文献阅读笔记,数据库,抽象代数)