Dafny反向查找地图

时间:2018-05-12 01:42:48

标签: dictionary dafny

您好我有map<char,int>这样的地图,我希望进行反向查找,即从值中找到一个键。

Dafny有没有办法做到这一点(例如map.getKey(value))尚未记录?

我认为一种解决方案可能是反转地图,以便我可以将map<char,int>反转为map<int,char,然后在反转的地图上使用常规查找。我不知道如何做到这一点,但尝试使用地图理解map table[i] | i in table :: i,但这不起作用。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

您可以使用“let that-that”语句来执行此操作。例如:

method Test(m: map<char,int>, val: int)
    requires exists i :: i in m && m[i] == val;
{
    var i :| i in m && m[i] == val;
    // now use i...
}

您也可以按如下方式反转地图(但您不需要只进行一次反向查找)

function method InvertMap(m: map<char,int>): map<int,char>
{
    map b | b in m.Values :: var a :| a in m && m[a] == b; a
}