使用Lava进行等效验证

时间:2018-02-14 12:31:05

标签: haskell formal-verification equivalence lava

我一直在努力验证Chalmers Lava中两个电路之间的等效性。我已声明了一个类型位:

type Bit = Signal Bool   

我有两个电路,每个电路都有一个位列表作为输入和一个位列表元组,以及一个检查它们等价的函数:

circuit1:: [Bit] ->([Bit],[Bit])
circuit2:: [Bit] ->([Bit],[Bit])
propEquiv input = ok
    where 
        out1 = circuit1 input 
        out2 = circuit2 input 
        ok = out1 <==> out2 

这两个电路将输入作为64个元素的列表。 我能够使用模拟使用一个输入来模拟它们,并使用simulateSeq使用多个模拟它们,但是对于孔域我不能并且我得到了这个错误:

<interactive>:7:20:
    No instance for (Finite [Bit]) arising from a use of `domain'
    In the second argument of `simulateSeq', namely `domain'
    In the expression: simulateSeq ipSpec domain
    In an equation for `it': it = simulateSeq ipSpec domain

(第7行我有类型声明)

同样对于propEquiv,我可以模拟它,但我无法使用satzoo验证它,我得到了这个错误:

*Main> satzoo propEquiv 
<interactive>:9:1:
    No instance for (Fresh [Bit]) arising from a use of `satzoo'
    In the expression: satzoo propEquiv
    In an equation for `it': it = satzoo propEquiv
*Main> 

我理解他们两人在网上搜索时都找不到任何东西,有人可以帮我这个吗?我试图用列表中的64个元素来定义电路,但它没有用。

问候。

0 个答案:

没有答案