Я хочу написать функцию, которая вычисляет количество истинных значений p 0 .. pt в функции nat-> prop.
Section count_sc.
Variable p:nat->Prop.
Hypothesis p_dec:forall x:nat , {p x} + { ~ p x }.
Fixpoint count (x : nat) :=
match x with
| 0 => if p_dec(0) then 1 else 0
| S y => if p_dec(x) then 1+count y else count y
end.
End count_sc.
Definition fret (x:nat) := False.
Check count.
Axiom fret_dec : forall x : nat , { fret x } + { ~ fret x }.
Theorem hello_decide : forall x : nat , count fret fret_dec x = 0.
Proof.
intros.
induction x.
unfold count.
replace (fret_dec 0) with false.
Qed.
Перед тактикой замены я должен доказать некоторую цель следующим образом:
(если fret_dec 0, то 1 еще 0) = 0
Доза Coq не рассчитывает автоматически значение if.и если я попытаюсь заменить fret_dec его значением, я получу эту ошибку:
Ошибка: термины не имеют конвертируемых типов.
Как я могу написать функцию подсчета, которую я могу развернуть ииспользовать это в теоремах?