什么是disjoint-support?

  • 什么是布尔差分(boolean difference)?
  • 什么是disjoint-support?
  • 什么是decomposition?
    • 为什么要对布尔函数进行decomposition?
    • Disjunctive Decompositions
  • Shannon- and disjunctive-decompositions
    • case1
    • case2
    • case3
      • Case3.a


这是原文The Disjunctive Decompositionof Logic Functions的解释。

什么是布尔差分(boolean difference)?

∂ F / ∂ x i = F x i = 0 ⊕ F x i = 1 \partial F/\partial x_i = F_{x_i=0} \oplus F_{x_i=1} ∂F/∂xi​=Fxi​=0​⊕Fxi​=1​,如果 ∂ F / ∂ x i \partial F/\partial x_i ∂F/∂xi​恒等于0,则说明 F F F的取值与变量 x i x_i xi​无关。如果不恒等于0,则称这一类的变量集合 S F S_F SF​为布尔函数 F F F的support

什么是disjoint-support?

如果有两个布尔函数 F F F和 G G G,如果他们的 s u p p o r t support support集合并集为空,即 S F ⋂ S G = ϕ S_F \bigcap S_G = \phi SF​⋂SG​=ϕ,则称这两个布尔函数是disjoint-support的。

什么是decomposition?

为什么要对布尔函数进行decomposition?

首先,若将一个复杂的二级布尔函数表示转换成一个多级的表示,则它可以将输入集中在更简单和更小的逻辑块中,从而减少了面积和互连。
其次,通过证明 F F F的子函数在计算中的独立性,揭示了布尔函数 F F F计算的并行性。

Disjunctive Decompositions

对布尔函数的 F F F的分解是通过寻找其他的更简单的函数 L L L和 A i A_i Ai​完成,能够使得,
F ( x i , . . . , x n ) = L ( A 1 ( x 1 , . . . ) , A 2 ( x 1 , . . . ) , . . . , A k ( x 1 , . . . ) ) (1) F(x_i,...,x_n)=L(A_1(x_1,...), A_2(x_1,...),...,A_k(x_1,...)) \tag{1} F(xi​,...,xn​)=L(A1​(x1​,...),A2​(x1​,...),...,Ak​(x1​,...))(1)

这个公式的意思就是将原始的布尔函数 F F F,拆分成 k k k个更小的函数 A i A_i Ai​, A i A_i Ai​之间满足disjoint-support,最后通过函数 L L L,将这些 A i A_i Ai​结合在一起。

定义1: 对于函数 L ( A 1 , . . . , A k ) L(A_1,...,A_k) L(A1​,...,Ak​), 如果存在 k k k个非常数disjoint-support函数 A 1 , . . . , A k , n > k > = 2 A_1,...,A_k,n > k >= 2 A1​,...,Ak​,n>k>=2满足等式(1),则称 F F F是reduce。如果任何 L L L都不能分解 F F F,则 F F F被称为prime

函数 A i A_i Ai​被称为 F F F的分解的形式输入(formal input)。 F F F的形式输入集合表示为 F / L F/L F/L,称为 F F F的分解列表(decomposition list)。我们称 F F F的disjunctive decomposition为满足等式(1)的任意 ( L , F / L ) (L,F/L) (L,F/L)组合。

如果F是可分解的,则可以将其分解描述为:
》有一个unique prime函数L将它分解,可以将它的formal input排列和互补(取反)。
》如果 L L L的support集合内元素个数 ∣ S L ∣ > 2 |S_L| > 2 ∣SL​∣>2,那么 F / L F/L F/L中的函数也是唯一确定的,可以将它的formal input排列和互补。(没太理解)
》如果 L L L的support集合内元素个数 ∣ S L ∣ = 2 |S_L| = 2 ∣SL​∣=2,那么F可以被精确地用以下方式之一分解:
(1)

我的理解是 L L L的support集合中只有 A 1 , A 2 A_1,A_2 A1​,A2​,那么 F = A 1 + A 2 F=A_1 + A_2 F=A1​+A2​,其中 L L L的功能即 O R OR OR。
(2)

没懂。可能是F被分解成 F = A 1 + A 2 ‾ F=\overline{A_1+A_2} F=A1​+A2​​这样?
(3)

这里 F F F被分解成 F = A 1 ⊕ A 2 F=A_1 \oplus A_2 F=A1​⊕A2​或者 F = A 1 ⊙ A 2 F=A_1 \odot A_2 F=A1​⊙A2​。

Shannon- and disjunctive-decompositions


大概像这样,

目的是通过 F 0 F_0 F0​和 F 1 F_1 F1​的分解最终推断出 F F F的分解。
论文里说 F F F的分解和他的余因子之间的联系概念很简单。例如,如果一个函数 A A A属于 F 0 F_0 F0​和 F 1 F_1 F1​的分解树,则该函数 A A A一定属于 F F F的分解树。

不过,在实践中需要考虑几个案例和子案例。如下,
在函数 F F F的分解中,最上面的变量 z z z只能以以下四种方式中的一种出现:

接下来详细分析这四种情况。

case1

在这种情况中, F ( z = 0 ) , F ( z = 1 ) F ( z = 0), F ( z = 1) F(z=0),F(z=1)其中一个必须是常数。假设 F 1 = 1 F_1=1 F1​=1,则 F = F 0 + z F=F_0+z F=F0​+z,因此 F F F的分解类型是 O R OR OR。且F的分解列表是 F 0 + z F_0+z F0​+z。
这个实际上是有点简化的,我们知道 F = z ‾ F 0 + z F 1 F=\overline{z}F_0+zF_1 F=zF0​+zF1​,那么当 F 1 = 1 F_1=1 F1​=1的时候,这个式子就变为 F = z ‾ F 0 + z F=\overline{z}F_0+z F=zF0​+z,根据布尔化简,得到 F 0 + z F_0+z F0​+z。

case2

在这种情况下,需要 F 0 = F 1 ‾ F_0=\overline{F_1} F0​=F1​​。我们只要验证了 F 0 = F 1 ‾ F_0=\overline{F_1} F0​=F1​​,那么足以推断出 F F F的分解为 F = z ⊕ F 0 F=z \oplus F_0 F=z⊕F0​。
因为当 z = 0 z=0 z=0时, F = 0 ⊕ F 0 = F 0 F=0 \oplus F_0=F_0 F=0⊕F0​=F0​;当 z = 1 z=1 z=1时, F = 1 ⊕ F 0 = F 0 ‾ = F 1 F=1 \oplus F_0=\overline{F_0}=F_1 F=1⊕F0​=F0​​=F1​。能够符合等式 F = z ‾ F 0 + z F 1 F=\overline{z}F_0+zF_1 F=zF0​+zF1​。

case3


情况3,指的是如果top variable z属于F的formal input的情况。

Case3.a


F 0 F_0 F0​和 F 1 F_1 F1​能够被同一个函数L分解。且 F 0 F_0 F0​和 F 1 F_1 F1​的分解列表(形式输入,formal input)是重合的,只有 A ( z = 0 ) A(z=0) A(z=0)和 A ( z = 1 ) A(z=1) A(z=1)不同。
假设, F 0 F_0 F0​和 F 1 F_1 F1​的分解分别含有函数 A 0 A_0 A0​和 A 1 A_1 A1​,则
只要有 A 0 = A 1 = 0 A_0=A_1=0 A0​=A1​=0或者 A 0 = A 1 = 1 A_0=A_1=1 A0​=A1​=1就有, F 0 ( A 0 = 0 ) = F 1 ( A 1 = 0 ) F_0(A_0=0)=F_1(A_1=0) F0​(A0​=0)=F1​(A1​=0) and F 0 ( A 0 = 1 ) = F 1 ( A 1 = 1 ) F_0(A_0=1)=F_1(A_1=1) F0​(A0​=1)=F1​(A1​=1)。

这个例子的top variable选择的是变量a。
所以当 a = 0 a=0 a=0, F 0 = M a j o r i t y ( b , c + e , f g ) F_0=Majority(b,c+e,fg) F0​=Majority(b,c+e,fg);当 a = 1 a=1 a=1, F 1 = M a j o r i t y ( d , c + e , f g ) F_1=Majority(d,c+e,fg) F1​=Majority(d,c+e,fg)。这两个余因子的形式输入就分别是 b , c + e , f g b,c+e,fg b,c+e,fg和 d , c + e , f g d,c+e,fg d,c+e,fg。所以只要b和d相等就满足上面提到的推论。
这里就能看出,top variable a a a就属于 F F F的一个形式输入 a ‾ b + a d \overline{a}b+ad ab+ad,另外几个形式输入分别是 c + e c+e c+e, f g fg fg。 根据上面的等式(5),令 A 0 = b , A 1 = d A_0=b,A_1=d A0​=b,A1​=d。因此,可以推断出F的分解为 a ‾ b + a d , c + e , f g \overline{a}b+ad,c+e,fg ab+ad,c+e,fg。


如果函数 F = M a j o r i t y ( a ⊕ b , c + e , f g ) F=Majority(a\oplus b,c+e,fg) F=Majority(a⊕b,c+e,fg),选择top variable为a。则当 a = 0 a=0 a=0, F 0 = M a j o r i t y ( b , c + e , f g ) F_0=Majority(b,c+e,fg) F0​=Majority(b,c+e,fg);当 a = 1 a=1 a=1, F 1 = M a j o r i t y ( b ‾ , c + e , f g ) F_1=Majority(\overline{b},c+e,fg) F1​=Majority(b,c+e,fg)。根据case2, A 1 = A 0 ‾ A_1=\overline{A_0} A1​=A0​​,令 A 0 = b , A 1 = b ‾ A_0=b,A_1=\overline{b} A0​=b,A1​=b可以得到 A = z ‾ A 0 + z A 1 = z ⊕ A 0 A=\overline{z}A_0+zA_1=z\oplus A_0 A=zA0​+zA1​=z⊕A0​。因此F的分解列表包括 z ⊕ A 0 , c + e , f g z\oplus A_0,c+e,fg z⊕A0​,c+e,fg。

什么是disjoint-support?相关推荐

  1. 逻辑优化基础-disjoint support decomposition

    先遣兵 在了解 disjoint support decomposition 之前,先学习两个基本的概念. disjoint 数学含义上的两个集合交集,所谓非相交,即交集为空集. A ∩ B = C ...

  2. ERROR 6: GEOS support not enabled.

    要学习GEOS库,肯定绕不开地理方面的东西.如果需要判断的两个多边形或几何图形,不是自己创建的,而是来自shapefile文件,那就得将GEOS库和GDAL/OGR库结合使用了.实际上只需要OGR就行 ...

  3. openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old

    具体错误如下: openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file ...

  4. ERROR: Failed to resolve: com.android.support:appcompat-v7:29.0.0

    错误内容如下 ERROR: Failed to resolve: com.android.support:appcompat-v7:29.0.0 Show in Project Structure d ...

  5. Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView

    今天创建了一个 demo ,然后就是复制RecyclerView 过去, 到最后完成运行的时候发现 系统奔溃了, 然后 提示 Binary XML file line #8: Error inflat ...

  6. from selenium.webdriver.support.ui import Select

    from selenium.webdriver.support.ui import Select Select(d.find_element_by_id(u'key_开户行')).first_sele ...

  7. OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用

    OpenCV 3.3中给出了支持向量机(Support Vector Machines)的实现,即cv::ml::SVM类,此类的声明在include/opencv2/ml.hpp文件中,实现在mod ...

  8. android support v4、v7、v13

    android support v4.v7.v13的区别及作用和用法 1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有s ...

  9. java.lang.NoSuchMethodError: org.springframework.web.context.support.XmlWebApplicationContext.getEnv

    转自:https://blog.csdn.net/u012941811/article/details/16960493 ava.lang.NoSuchMethodError: org.springf ...

  10. Android:你好,androidX!再见,android.support

    190325 补充:莫名问题的解决 181106 补充:修改未迁移成功的三方库 1.AndroidX简介 点击查看Android文档中对androidx的简介 按照官方文档说明 androidx 是对 ...

最新文章

  1. Apache的详细安装教程和遇到的问题解决方案
  2. c/c++ 函数、常量、指针和数组的关系梳理
  3. 运行vc++6.0出现Error spawning cl.exe问题解决方法
  4. Hibernate开发中常见错误总结
  5. SAP Spartacus 服务器端渲染处理内存泄漏的准则
  6. 使用Node 操作MySQL数据库
  7. python绘制动态图表怎么存下来_做动态图表,没有数据?用Python就能获取!
  8. PyTorch学习—21.GPU的使用
  9. html微博图片上传,如何使上传新浪微博照片更清晰
  10. 面试字节跳动后台开发(实习)
  11. keyshot渲染玻璃打光_KeyShot渲染,打光这么打,效果倍儿棒!
  12. 爬取4399网站的图片
  13. 从Dijkstra谈帅才的洞察力(王选)
  14. OpenCV图像处理--获取图像属性
  15. ubuntu下重启tomcat
  16. mybatis的原理详解
  17. GeneXus学习记录
  18. 爬取微信公众号方法总结
  19. 2020年中科院软件所夏令营经历
  20. FDC2212电容传感器

热门文章

  1. AOP的两种动态代理机制
  2. eclipse的安装和汉化
  3. 啪啪啪!敲代码时你喜欢听什么音乐?
  4. 麻将判断几步入听算法
  5. C++中的字符串流详解iostream,sstream
  6. linux 终端命令行的快捷键列表
  7. 出现无法访问的故障,ping出现请求超时time out,系目的主机网关造成问题排查过程
  8. linux mysql编译参数,Mysql 编译参数详解
  9. CV【2】:卷积与Conv2d
  10. Linux安全基础知识