我有一個具有包含在其長度l
的字符串, pat
陣列line
「沒有發現觸發條件」是具有包含在其長度p
的字符串另一個陣列。 注:p
和l
不是陣列Dafny錯誤消息
目的是看看是否包含在pat
字符串中存在line
的長度。如果是這樣,這個方法應該返回該單詞的第一個字母的line
索引,如果不是,它應該返回-1
。
所給予我們的「發現觸發沒有條件」的不變量誤差ensures exists j :: (0<= j < l) && j == pos;
和invariant forall j :: 0 <= j < iline ==> j != pos;
我對循環邏輯是,雖然他們是在循環索引沒有被發現。確保是在遇到索引時。
什麼可能是錯的?
下面是代碼:
method find(line:array<char>, l:int, pat:array<char>, p:int) returns (pos:int)
requires line!=null && pat!=null;
requires 0 <= l < line.Length;
requires 0 <= p < pat.Length;
ensures exists j :: (0<= j < l) && j == pos;
{
var iline:int := 0;
var ipat:int := 0;
var initialPos:int := -1;
while(iline<l && ipat<pat.Length)
invariant 0<=iline<=l;
invariant 0<=ipat<=pat.Length;
invariant forall j :: 0 <= j < iline ==> j != pos;
{
if(line[iline]==pat[ipat] && (line[iline]!=' ' && pat[ipat]!=' ')){
if(initialPos==-1){
initialPos := iline;
}
ipat:= ipat + 1;
}
else{
if(ipat>0){
if(line[iline] == pat[ipat-1]){
initialPos := initialPos + 1;
}
}
ipat:=0;
initialPos := -1;
}
if(ipat==p){
return initialPos;
}
iline := iline + 1;
}
return initialPos;
}
我收到以下錯誤: screenshot of Dafny output