ANF.pdf

‫ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ‬
‫ﻣﺤﺎﺳﺒﺔ ﺷﻜﻞ ﻧﺮﻣﺎل ﺟﺒﺮي )‪ (Algebraic Normal Form‬ﺗﻮاﺑﻊ ﺑﻮﻟﻲ‬
‫‪ --‬ﻣﺤﻤﺪ ﺻﺎدق دوﺳﺘﻲ‬
‫ﻣﻲﺗﻮان اﺛﺒﺎت ﻛﺮد ﻛﻪ ﻫﺮ ﺗﺎﺑﻊ ﺑﻮﻟﻲ را ﻣﻲﺷﻮد ﻓﻘﻂ ﺑﺎ اﺳﺘﻔﺎده از ﻋﻤﻠﮕﺮﻫﺎي ﺑﻮﻟﻲ ‪ XOR‬و ‪ AND‬ﭘﻴﺎدهﺳﺎزي ﻛﺮد‪.‬‬
‫اﻳﻦ ﻧﺤﻮة ﻧﻤﺎﻳﺶ ﺗﺎﺑﻊ »ﻓﺮم ﻧﺮﻣﺎل ﺟﺒﺮي« )‪ (ANF‬ﻧﺎم دارد‪ .‬در اﻳﻦ ﻣﻘﺎﻟﻪ روﺷﻲ ‪ constructive‬ﺑﺮاي اﺛﺒﺎت اﻳﻦ ﻗﻀﻴﻪ‬
‫ﭘﻴﺪا ﻛﻨﻴﻢ‪ ،‬و ﺑﻪ ﻛﻤﻚ آن ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ ﺑﺎ داﺷﺘﻦ ﺟﺪول درﺳﺘﻲ )‪ (Truth Table‬ﺗﺎﺑﻊ‪ ANF ،‬آن را ﺑﻪ ﻋﻨﻮان‬
‫ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﺪ‪.‬‬
‫‪ .1‬ﻣﺒﺎﻧﻲ ﺗﺌﻮري‬
‫ﻓﺮض ﻛﻨﻴﺪ ﺗﺎﺑﻊ ﺑﻮﻟﻲ ‪ n‬ﻣﺘﻐﻴﺮة ‪ f‬داده ﺷﺪه اﺳﺖ‪ ANF .‬اﻳﻦ ﺗﺎﺑﻊ ﺑﻪ ﻓﺮم زﻳﺮ اﺳﺖ‪:‬‬
‫= ) ‪f ( xn −1,… , x0‬‬
‫‪a0‬‬
‫‪⊕∑ ai xi‬‬
‫‪⊕∑ ai j xi x j‬‬
‫⊕‬
‫‪⊕ a2n −1 xn −1 … x0‬‬
‫ﺑﺮاي ﺳﺎدﮔﻲ ﻛﺎر ﻻزم اﺳﺖ ﻗﺮاردادي ﺑﺮاي ﻧﺤﻮة ﻧﻤﺎﻳﺶ اﻧﺪﻳﺲ ﺿﺮاﻳﺐ ﻳﻚ ﺟﻤﻠﺔ ﺧﺎص وﺿﻊ ﻛﻨﻴﻢ‪ .‬ﻣﺜﻼً‪ ،‬ﻓﺮض‬
‫ﻛﻨﻴﺪ ‪ n = 6‬ﺑﻮده و ﻣﻲﺧﻮاﻫﻴﻢ اﻧﺪﻳﺲ ‪) ai‬ﻳﻌﻨﻲ ‪ (i‬را ﻛﻪ ﺿﺮﻳﺐ ﺟﻤﻠﺔ ‪ x5 x4 x2 x0‬اﺳﺖ را ﻣﺸﺨﺺ ﻛﻨﻴﻢ‪ .‬ﺑﺮاي اﻳﻦ‬
‫ﻣﻨﻈﻮر ﻛﺎﻓﻴﺴﺖ ﺟﻤﻠﻪ را ﻳﻚ ﻋﺪد ﺑﺎﻳﻨﺮي در ﻧﻈﺮ ﺑﮕﻴﺮﻳﻢ؛ ﻣﺜﻼً در اﻳﻨﺠﺎ ﻋﺪد ﺑﺎﻳﻨﺮي ﻣﻔﺮوض ﻋﺪد ‪(110101)2 = 53‬‬
‫اﺳﺖ )ﻣﺸﺎﻫﺪه ﻣﻲﻛﻨﻴﺪ ﻛﻪ در ﻣﻮﻗﻌﻴﺖ ‪ ،2 ،4 ،5‬و ﺻﻔﺮ آن ﻣﻘﺪار ‪ 1‬و در ﻣﻮﻗﻌﻴﺘﻬﺎي دﻳﮕﺮ ﻋﺪد ‪ 0‬ﻗﺮار داده ﺷﺪه‬
‫اﺳﺖ(‪ .‬ﻧﺘﻴﺠﺘﺎً ﺿﺮﻳﺐ ﺟﻤﻠﺔ ‪ x5 x4 x2 x0‬ﺑﺮاﺑﺮ ‪ a53‬ﺧﻮاﻫﺪ ﺑﻮد‪ .‬ﺑﻪ ﻋﻨﻮان ﻣﺜﺎﻟﻲ دﻳﮕﺮ‪ ،‬ﺿﺮاﻳﺐ ﻳﻚ ﺗﺎﺑﻊ ﺳﻪ ﻣﺘﻐﻴﺮه‬
‫ﻧﺸﺎن داده ﺷﺪهاﻧﺪ‪:‬‬
‫‪f ( x2 , x1, x0 ) = a0 ⊕ a1x0 ⊕ a2 x1 ⊕ a4 x2 ⊕ a3 x1x0 ⊕ a5 x2 x0 ⊕ a6 x2 x1 ⊕ a7 x2 x1x0‬‬
‫در اداﻣﻪ از ﻫﻤﻴﻦ ﻣﺜﺎل اﺳﺘﻔﺎده ﻛﺮده ﺗﺎ از ﺟﺪول درﺳﺘﻲ ﺑﻪ ﺿﺮاﻳﺐ ‪ ANF‬ﺗﺎﺑﻊ ﺑﺮﺳﻴﻢ‪.‬‬
‫)‪ f (0,0,0‬را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ .‬اﻳﻦ ﻣﻘﺪار ﺑﺎ ﺗﻮﺟﻪ ﻧﻤﺎش ﻓﻮق ﺑﺮاي ‪ ANF‬ﺗﺎﺑﻊ ﺳﻪ ﻣﺘﻐﻴﺮه ﺑﺮاﺑﺮ ‪ a0‬اﺳﺖ‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ‬
‫ﻣﻘﺪار ‪ a0‬را ﺑﻪ ﺳﺎدﮔﻲ ﻣﻲﺗﻮان ﻳﺎﻓﺖ‪ .‬ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ )‪ f (0,0,1‬ﺑﺮاﺑﺮ ‪ a0 ⊕ a1‬اﺳﺖ ﻛﻪ ﭼﻮن ‪ a0‬را از ﮔﺎم ﻗﺒﻠﻲ‬
‫دارﻳﻢ‪ ،‬ﻣﻘﺪار ‪ a1‬ﻧﻴﺰ ﺑﻪ ﺳﺎدﮔﻲ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ‪ .‬ﭘﺲ دارﻳﻢ‪:‬‬
‫)‪a0 = f (0,0,0‬‬
‫)‪a1 = f (0,0,0) ⊕ f (0,0,1‬‬
‫)‪a2 = f (0,0,0) ⊕ f (0,1,0‬‬
‫)‪a4 = f (0,0,0) ⊕ f (1,0,0‬‬
‫)‪a3 = f (0,0,0) ⊕ f (0,0,1) ⊕ f (0,1,0) ⊕ f (0,1,1‬‬
‫)‪a5 = f (0,0,0) ⊕ f (0,0,1) ⊕ f (1,0,0) ⊕ f (1,0,1‬‬
‫)‪a6 = f (0,0,0) ⊕ f (0,1,0) ⊕ f (1,0,0) ⊕ f (1,1,0‬‬
‫)‪a7 = f (0,0,0) ⊕ f (0,0,1) ⊕ f (0,1,0) ⊕ f (0,1,1) ⊕ f (1,0,0) ⊕ f (1,0,1) ⊕ f (1,1,0) ⊕ f (1,1,1‬‬
‫ﺑﻪ ﻃﻮر ﻛﻠﻲ‪ ،‬ﺑﺮاي ﺗﺎﺑﻊ ﺑﻮﻟﻲ ‪ n‬ﻣﺘﻐﻴﺮة ) ‪ f ( xn −1,… , x0‬ﻣﻲﺗﻮان ﻧﻮﺷﺖ‪:‬‬
‫)) ‪( f (k‬‬
‫‪XOR‬‬
‫‪k=different‬‬
‫‪on-off states‬‬
‫‪of i's bits‬‬
‫= ‪ai‬‬
‫ﻣﻨﻈﻮر از ‪ on-off state‬آن اﺳﺖ ﻛﻪ ﺣﺎﻟﺘﻬﺎي ﻣﺨﺘﻠﻔﻲ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﻢ ﻛﻪ ﻫﺮﻛﺪام از ﺑﻴﺘﻬﺎي ‪ i‬را ﻛﻪ ‪ 1‬ﻫﺴﺘﻨﺪ ﻳﻜﺒﺎر‬
‫‪ 1‬و ﻳﻜﺒﺎر ﺻﻔﺮ ﻛﻨﺪ‪ .‬ﻣﺜﻼً‪:‬‬
‫)‪On-Off states of (101)2 = (000), (001), (100), (101‬‬
‫ﺣﺎل ﺑﺎ داﺷﺘﻦ اﻳﻦ ﻓﺮﻣﻮل ﺑﻪ ﺳﺎدﮔﻲ ﻣﻲﺗﻮان ﺑﺮﻧﺎﻣﻪاي ﻧﻮﺷﺖ ﻛﻪ ﺿﺮاﻳﺐ ‪ ANF‬را ﻣﺤﺎﺳﺒﻪ ﻛﻨﺪ‪.‬‬
‫‪ .2‬ﺧﻄﻲ ﺑﻮدن‬
‫ﻣﻲداﻧﻴﻢ ﺗﺎﺑﻊ ‪ f‬ﺧﻄﻲ اﺳﺖ اﮔﺮ و ﺗﻨﻬﺎ اﮔﺮ ﺷﺮاﻳﻂ زﻳﺮ را ارﺿﺎ ﻛﻨﺪ‪:‬‬
‫)‪f (x,y) = f(x)+f(y‬‬
‫)‪f (ax) = a f(x‬‬
‫ﻓﺮض ﻛﻨﻴﺪ ﺗﺎﺑﻊ ‪ f‬ﻳﻚ ﺗﺎﺑﻊ ﺑﻮﻟﻲ ﺑﺎﺷﺪ ﻛﻪ ﺑﻪ ﻓﺮم ﻧﺮﻣﺎل ﺟﺒﺮي ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ‪ .‬ﺑﺎ ﺗﻮﺟﻪ ﺑﺎ ﺷﺮاﻳﻂ ﻓﻮق ﻣﻲﺗﻮان‬
‫اﺛﺒﺎت ﻛﺮد ﻛﻪ ‪ f‬ﺧﻄﻲ اﺳﺖ اﮔﺮ و ﺗﻨﻬﺎ اﮔﺮ در آن ﺟﻤﻠﺔ ﻣﺨﺘﻠﻂ )ﺟﻤﻠﻪاي ﻛﻪ ﺣﺎﺻﻠﻀﺮب ﺑﻴﺶ از ﻳﻚ ‪ xi‬اﺳﺖ(‬
‫ﻇﺎﻫﺮ ﻧﺸﺪه ﺑﺎﺷﺪ‪ .‬در ﻣﺜﺎل زﻳﺮ‪ f1 ،‬و ‪ f2‬ﺧﻄﻲ و ‪ f 3‬ﻏﻴﺮ ﺧﻄﻲ اﺳﺖ‪.‬‬
‫‪f1 = 1‬‬
‫‪f2 = x0 ⊕ x1 ⊕ x6‬‬
‫‪f 3 = x0 ⊕ x1 ⊕ x0 x2 x3 ⊕ x5 x6‬‬
‫ﺑﻨﺎ ﺑﻪ ﺗﻌﺮﻳﻒ‪ ،‬ﺣﺎﺻﻠﻀﺮب ‪ m‬ﻣﺘﻐﻴﺮ ﻣﺘﻤﺎﻳﺰ‪ ،‬ﺣﺎﺻﻠﻀﺮب ﻣﺮﺗﺒﺔ ‪ m‬ام )‪ (mth-order product‬ﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ‪:‬‬
‫‪The ANF of an n-variable function f (x0,x1,…,xn-1) can be thought of as a modulo-2 sum (XOR) of‬‬
‫‪distinct mth-order products of its variables, 0 ≤ m ≤ n.‬‬
‫درﺟﺔ ﻏﻴﺮ ﺧﻄﻲ ﺑﻮدن ﻳﻚ ﺗﺎﺑﻊ ﺑﻮﻟﻲ‪ ،‬ﻣﺎﻛﺰﻳﻤﻢ ﻣﺮﺗﺒﺔ ﺟﻤﻼت ‪ ANF‬آن ﺗﺎﺑﻊ اﺳﺖ‪ .‬در ﻣﺜﺎل ﻓﻮق‪ ،‬درﺟﺔ ﻏﻴﺮ ﺧﻄﻲ‬
‫‪ f1‬ﺻﻔﺮ‪ f2 ،‬ﻳﻚ‪ ،‬و ‪ f 3‬ﺳﻪ اﺳﺖ‪.‬‬
‫‪ .3‬ﺑﺮﻧﺎﻣﻪ‬
‫ﺑﺮﻧﺎﻣﺔ ‪) ANF.cs‬ﺑﺨﺶ ‪ resources‬ﺻﻔﺤﺔ ﺧﺎﻧﮕﻲ درس( ﺟﺪول درﺳﺘﻲ ﺗﺎﺑﻊ را ﮔﺮﻓﺘﻪ و ﺧﺮوﺟﻲ را ﻛﻪ ‪ ANF‬ﺗﺎﺑﻊ‬
‫اﺳﺖ ﻧﺸﺎن ﻣﻲدﻫﺪ‪ .‬اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﻪ زﺑﺎن ‪ C# 2.0‬ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ‪.‬‬
‫‪ .4‬ﻧﻤﻮﻧﻪ اﺟﺮا‬
‫در اﻳﻨﺠﺎ ﻧﺘﻴﺠﺔ ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻳﻜﺒﺎر ﺑﺮاي ﻳﻚ ﺗﺎﺑﻊ ﻓﺮﺿﻲ ﭼﻬﺎر ﻣﺘﻐﻴﺮه و ﻳﻜﺒﺎر ﺑﺮاي ﻳﻚ ﺗﺎﺑﻊ ﻓﺮﺿﻲ ﺷﺶ ﻣﺘﻐﻴﺮه‬
‫ﻧﺸﺎن داده ﺷﺪه اﺳﺖ‪:‬‬
‫ﺗﺎﺑﻊ ﭼﻬﺎر ﻣﺘﻐﻴﺮه‬
‫‪What's number of variables? 6‬‬
‫‪Enter the truth table for the function:‬‬
‫‪f(1,0,0,0)=1‬‬
‫‪f(1,0,0,1)=1‬‬
‫‪f(1,0,1,0)=0‬‬
‫‪f(1,0,1,1)=1‬‬
‫‪f(1,1,0,0)=0‬‬
‫‪f(1,1,0,1)=0‬‬
‫‪f(1,1,1,0)=0‬‬
‫‪f(1,1,1,1)=0‬‬
‫‪f(0,0,0,0)=1‬‬
‫‪f(0,0,0,1)=0‬‬
‫‪f(0,0,1,0)=1‬‬
‫‪f(0,0,1,1)=1‬‬
‫‪f(0,1,0,0)=0‬‬
‫‪f(0,1,0,1)=0‬‬
‫‪f(0,1,1,0)=1‬‬
‫‪f(0,1,1,1)=0‬‬
‫ﻧﺘﻴﺠﻪ‪:‬‬
‫‪Function=1‬‬
‫‪+x0+x2‬‬
‫‪+x1x0+x2x0+x2x1+x3x0+x3x1‬‬
‫‪+x3x2x0‬‬
‫ﻓﺮم ﺧﻮاﻧﺎﺗﺮ ﻧﺘﻴﺠﻪ‪:‬‬
‫‪1‬‬
85-86 ‫ﻧﻴﻤﺴﺎل اول‬
85/08/1 :‫ﺗﺎرﻳﺦ ﺗﺤﻮﻳﻞ‬
2 ‫ﺗﻤﺮﻳﻦ‬
85208015 :‫ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ‬
‫رﻣﺰﻧﮕﺎري‬
‫ ﻣﺤﻤﺪ ﺻﺎدق دوﺳﺘﻲ‬:‫ﻧﺎم و ﻧﺎم ﺧﺎﻧﻮادﮔﻲ‬
⊕ x0 ⊕ x2
⊕ x1x0 ⊕ x2x0 ⊕ x2x1 ⊕ x3x0 ⊕ x3x1
⊕ x3x2x0
‫ﺗﺎﺑﻊ ﭼﻬﺎر ﻣﺘﻐﻴﺮه‬
What's number of variables? 6
Enter the truth table for the function:
f(0,0,0,0,0,0)=0
f(0,0,0,0,0,1)=0
f(0,0,0,0,1,0)=0
f(0,0,0,0,1,1)=0
f(0,0,0,1,0,0)=1
f(0,0,0,1,0,1)=1
f(0,0,0,1,1,0)=1
f(0,0,0,1,1,1)=1
f(0,0,1,0,0,0)=0
f(0,0,1,0,0,1)=0
f(0,0,1,0,1,0)=0
f(0,0,1,0,1,1)=0
f(0,0,1,1,0,0)=0
f(0,0,1,1,0,1)=0
f(0,0,1,1,1,0)=0
f(0,0,1,1,1,1)=0
f(0,1,0,0,0,0)=1
f(0,1,0,0,0,1)=0
f(0,1,0,0,1,0)=0
f(0,1,0,0,1,1)=0
f(0,1,0,1,0,0)=0
f(0,1,0,1,0,1)=0
f(0,1,0,1,1,0)=0
f(0,1,0,1,1,1)=0
f(0,1,1,0,0,0)=0
f(0,1,1,0,0,1)=1
f(0,1,1,0,1,0)=1
f(0,1,1,0,1,1)=1
f(0,1,1,1,0,0)=1
f(0,1,1,1,0,1)=1
f(0,1,1,1,1,0)=1
f(0,1,1,1,1,1)=1
f(1,0,0,0,0,0)=0
f(1,0,0,0,0,1)=1
f(1,0,0,0,1,0)=0
f(1,0,0,0,1,1)=1
f(1,0,0,1,0,0)=0
f(1,0,0,1,0,1)=1
f(1,0,0,1,1,0)=1
f(1,0,0,1,1,1)=1
f(1,0,1,0,0,0)=1
f(1,0,1,0,0,1)=0
f(1,0,1,0,1,0)=0
f(1,0,1,0,1,1)=0
f(1,0,1,1,0,0)=0
f(1,0,1,1,0,1)=1
f(1,0,1,1,1,0)=1
f(1,0,1,1,1,1)=0
f(1,1,0,0,0,0)=1
f(1,1,0,0,0,1)=0
f(1,1,0,0,1,0)=1
f(1,1,0,0,1,1)=1
f(1,1,0,1,0,0)=0
f(1,1,0,1,0,1)=1
f(1,1,0,1,1,0)=0
f(1,1,0,1,1,1)=1
f(1,1,1,0,0,0)=0
f(1,1,1,0,0,1)=1
f(1,1,1,0,1,0)=0
f(1,1,1,0,1,1)=1
f(1,1,1,1,0,0)=0
f(1,1,1,1,0,1)=0
f(1,1,1,1,1,0)=0
f(1,1,1,1,1,1)=0
:‫ﻧﺘﻴﺠﻪ‬
Function=x2+x4
85-86 ‫ﻧﻴﻤﺴﺎل اول‬
85/08/1 :‫ﺗﺎرﻳﺦ ﺗﺤﻮﻳﻞ‬
2 ‫ﺗﻤﺮﻳﻦ‬
85208015 :‫ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ‬
‫رﻣﺰﻧﮕﺎري‬
‫ ﻣﺤﻤﺪ ﺻﺎدق دوﺳﺘﻲ‬:‫ﻧﺎم و ﻧﺎم ﺧﺎﻧﻮادﮔﻲ‬
+x3x2+x4x0+x4x1+x4x3+x5x0+x5x2+x5x3
+x4x1x0+x4x2x0+x4x2x1+x4x3x2+x5x2x1+x5x3x1+x5x4x0+x5x4x1+x5x4x2+x5x4x3
+x4x2x1x0+x5x2x1x0+x5x3x1x0+x5x3x2x1+x5x4x2x0+x5x4x3x1+x5x4x3x2
+x5x4x2x1x0+x5x4x3x2x0+x5x4x3x2x1
+x5x4x3x2x1x0
:‫ﻓﺮم ﺧﻮاﻧﺎﺗﺮ ﻧﺘﻴﺠﻪ‬
x2 ⊕ x4
⊕ x3x2 ⊕ x4x0 ⊕ x4x1 ⊕ x4x3 ⊕ x5x0 ⊕ x5x2 ⊕ x5x3
⊕ x4x1x0 ⊕ x4x2x0 ⊕ x4x2x1 ⊕ x4x3x2 ⊕ x5x2x1 ⊕ x5x3x1 ⊕ x5x4x0 ⊕ x5x4x1 ⊕ x5x4x2 ⊕ x5x4x3
⊕ x4x2x1x0 ⊕ x5x2x1x0 ⊕ x5x3x1x0 ⊕ x5x3x2x1 ⊕ x5x4x2x0 ⊕ x5x4x3x1 ⊕ x5x4x3x2
⊕ x5x4x2x1x0 ⊕ x5x4x3x2x0 ⊕ x5x4x3x2x1
⊕ x5x4x3x2x1x0