我已经写了这个归纳谓词和它的(强)规范的部分证明:
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
是正确的,但由于我不确定,这里有一个它应该如何工作的例子: input [(1,2),(3,4)]
, expected output[3,7]