2017-10-23 4 views
1

Coq를 배우고 있으며, 처음으로 ring 전술을 사용해야합니다. Require Ring. 또는 Require ArithRing. 뒤에 목표를 가지고있는 방정식의 오른쪽을 단순화하기 위해 사용했지만 Coq는 존재하지 않는 참조를 취합니다. 나는 (내가 ringring_simplify 여러 번 시도) 여기에 코드 내 조각을 복사CoqIde의 "Ring"전술이 허용되지 않습니다.

Lemma sum_n_p : forall n, 2 * sum_n n + n = n * n. 

(* sum_n n is inductively defined as the sum of all numbers between 1 and n *) 

Proof. 
intros n. 
induction n as [ |m IHm]. 
+simpl. 
reflexivity. 
+assert (SnSn : S m * S m = m * m + 2 * m + 1). 
ring_simplify in [S m * S m = m * m + 2 * m + 1]. (*or just ring. , neither works*) 
rewrite SnSn. 
rewrite <- IHm. 
simpl. 
ring. 
Qed. 
+2

다음 번 팁을위한 간단한 팁 : 완전한 작동 예제를 제공하여보다 쉽게 ​​도움을 얻을 수 있도록하십시오. (당신은'sum_n'의 정의를 포함하지 않았습니다.) –

답변

3

그 전술을 호출하려면, 당신은 그 모듈을 가져와야합니다, 단지 그들을 필요로하지 :

Require Import ArithRing Ring. 

나는 그 라인들을 추가 한 후에 당신의 증명을 시험해 보았지만, Coq는 다른 에러에 빠지게되었습니다. Coq가 승인하기 전에 스크립트를 조정해야 할 수도 있습니다.

+0

예, 더 많은 문제가 있습니다 만, 큰 문제가 해결되었습니다. :) – Lyuben

+0

@Lyuben 답이 문제를 해결했다면 다음과 같이하면됩니다. 허용 된 것으로 표시해야합니다. –

+0

['Coq.Arith.Arith'] (https://coq.inria.fr/distrib/current/stdlib/Coq.Arith.Arith.html)는'ArithRing'을 내보내고 후자는'Ring'을 내 보냅니다. 그래서'Require 수입 Coq.Arith.Arith.'는 또한 작동 할 것입니다. –