Учитывая спецификацию функции, например, specification_of_sum
, как доказать в Coq, что существует только одна такая функция?Как доказать единственность функции в Coq при задании спецификации?
Я изучаю математику, и я могу доказать это в руке, но мои навыки в Coq ограничены (с использованием rewrite
и apply
).
Я нашел фрагмент кода ниже, с которым я боролся в течение некоторого времени.
Я пытаюсь развернуть спецификацию в доказательстве, но использование моего старого друга rewrite
, похоже, не позволяет мне идти дальше.
Может кто-нибудь объяснить, как подойти к этой проблеме с помощью простого синтаксиса?
Definition specification_of_sum (sum : (nat -> nat) -> nat -> nat) :=
forall f : nat -> nat,
sum f 0 = f 0
/\
forall n' : nat,
sum f (S n') = sum f n' + f (S n').
(* ********** *)
Theorem there_is_only_one_sum :
forall sum1 sum2 : (nat -> nat) -> nat -> nat,
specification_of_sum sum1 ->
specification_of_sum sum2 ->
forall (f : nat -> nat)
(n : nat),
sum1 f n = sum2 f n.
Proof.
Abort.
Спасибо, это было нужно, чтобы запустить мое доказательство :-) – Shuzheng
Можно ли заменить inversion_clear на «более простые» вещи? – Shuzheng
Действительно, инверсия ясно - это не правильный способ обработки гипотез, в моем ответе у вас есть правильный способ (вставки). – ejgallego