2016-11-14 3 views
1

증거에, 나는 마찬가지로 false와 ((negb (negb true))true에를 단순화 할 "다시"또는 "적용"을 사용하여 true로 단순화 (negb (neqb 사실)COQ :?.)

내가 COQ의 negb_involutive 절차를 알고

, 내 교과서가 도입되지 않았기 때문에, 나는 어떻게 든에만 rewrite 또는 apply를 사용하여 기능을 모방 관리해야한다고 생각합니다. 안톤 말했듯이

+2

'단순'을 사용할 수 없습니까? 게다가, 왼쪽과 오른쪽이 정의 적으로 동일하기 때문에'negb (negb true) = true'는 '반사성'에 의해 증명 될 수 있습니다. –

+0

이전에 "단순함"을 사용하지 않았지만 아마도 그 부분을 조사해야 할 것입니다. – Shuzheng

+2

나는'simple'만으로 충분하다고 생각합니다. 더 강력한 전략 인 '계산'도 있지만, 더 큰 용어를 생성 할 수 있습니다. 이 멋진 [치트 시트] (http://adam.chlipala.net/itp/tactic-reference.html)를보고 싶을 것입니다. –

답변

4

는,이 목표를 해결하는 일반적인 절차는 reflexivity, 또는를 사용하는 것 하위 버전 apply eq_refl.

(나는 ~~ x = negb x을 줄여 곳) COQ는 프로그래밍 언어에 실제로 ~~ (~~ true)의 실행을 쉽게 할 볼이 경우 기반

리콜 true, 같은 방법으로는

파이썬 또는 C

true을 반환 apply eq_refl은 Coq가 모든 것을 일치 시키려고 할 때 용어를 "계산"또는 "축소"하려고하므로 목표를 해결합니다. eq_refl의 유형은 forall x, x = x이므로 ~~ (~~ true)true으로 줄어들면 목표는 true = true이되며 해결할 수 있습니다. 이 경우 simpl은 목표를 보지 못하지만 기술적으로 증명할 필요는 없습니다.

귀하의 경우에 negb_involutive을 적용하는 것은 관용적이 아니며 negb에 대한 인수가 ~~ (~~ (~~ x)) = ~~ x과 같은 경우 유용합니다.

평등과 관련된 대부분의 목표에서 rewrite을 사용하고 있음을 알 수 있습니다.