В настоящее время я работаю с Coq, и у меня возникла проблема, которую я не знаю, как решить.
Допустим, мы работаем с заданным типом, я возьму nat в качестве примера и хочу использовать функцию f, которая может дать сбой. Чтобы компенсировать сбой, мы определяем f как тип nat -> option nat.
Теперь у меня есть заданная гипотеза H: nat -> bool, при которой f не ошибается, и я даже доказал лемму
Lemma no_error_in_f : forall (n:nat), H n = true -> exists (u:nat), f n = Some u.
Я хочу определить функцию g: nat->nat, которая дает результат f на n, если H n удовлетворен, и просто дает n в противном случае. Эта функция должна быть четко определена, но я не знаю, как ее правильно определить. Если я попробую что-то наивное, например Definition g (n:nat) := if H n then f n else n., проблема в системе набора текста.
Кто-нибудь знает, как собрать все элементы и сообщить системе, что определение допустимо?