Я должен доказать некоторые формализованные вещи. Есть две функции: получает несколько строк и массив строк, сравнивает, если есть совпадение, и возвращает bool. Я хочу проверить их обе в лемме и проверить ее. В программировании функции выглядят следующим образом.
// 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, которая должна быть верной, если обе функции вернут истину и докажут это. как
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, Student?
Я хотел бы получить ссылку на материалы, которые помогли бы мне решить такие проблемы в Coq.
Спасибо,
Вилаят