Я написал этот Индуктивный предикат и часть доказательства его (сильной) спецификации:
Inductive SumPairs : (nat*nat) -> list (nat*nat) -> Prop :=
| sp_base : SumPairs (0,0) nil
| sp_step : forall (l0:list (nat*nat)) (n0 n1: nat) (y:(nat*nat)), SumPairs (n0,n1) l0 -> SumPairs ((n0+(fst y)),(n1+(snd y))) (cons y l0).
Theorem sumPairs_correct : forall (l:list (nat*nat)), { n: nat | SumPairs (n,n) l }.
Proof.
...
Дело в том, что я не думаю, что теорема верна, потому что Coq не принимает что-то вроде {n0 n1: nat | ...}
. Есть ли способ исправить это, или я ошибаюсь?
Я думаю, что предикат SumPairs
правильный, но, поскольку я не уверен, вот пример того, как он должен работать: вход [(1,2),(3,4)]
, ожидаемый результат [3,7]