我必須證明一些正式的東西。有兩個函數,獲取一些字符串和字符串數組,比較是否匹配 並返回bool。我想在一個引理中對它們進行測試,並對其進行驗證。在編程中,函數將如下所示。Coq的功能
// Countryname is a country in the set (World) of all countries of the World.
// Europe, is a subset of the set of all countries of the Wrold.
function1 (String Countryname, String[] Europe) // function1() returns bool.
{
boolean result = false;
if Countryname = = ' '
result true;
else
{
for (int i = 0; i < sizeof(Europe) ; i++) {
if (Countryname = = Europe[i])
result true;
break;
}
}
return result1;
}
// function2() compares similarly getting a 'Name' of type string, and an array of 'Students' names. If name is empty, or it matchs a name
in the list of students, it should return true.
function2() // function2() returns bool.
{
...
}
我想在Coq中聲明一個引理,如果兩個函數都返回true並證明它的話,這應該是真的。像
Lemma Test : function1 /\ function2.
問題:
1)我怎麼能確定這些功能呢?這些不是歸納函數或遞歸函數(我認爲)。 他們應該像以下還是其他選項?
Definition function1 (c e : World) : bool :=
match c with
| empty => true // I dont know how to represent empty.
| e => true
end.
2)我該如何處理子集?就像我如何處理世界和歐洲的國家?請記住,我的要求是該函數得到一個名字和一個字符串數組。
3)這四個元素應該是什麼類型Countryname,World,Name,Students?
我很想得到一個材料的參考資料,幫助我在Coq中解決這些問題。
感謝,
Wilayat
這個問題,特別是假如你寫了大量的_Java_,看起來是非常錯誤的。也許你應該重新審視使用Coq的基本原理,然後再嘗試這樣做。但是,您應該注意到Coq確實已經支持(或者至少在標準庫中)處理子集。 –