2017-09-24 1 views

답변

2

당신은 (i < 5 논리 또는 제적 버전 비교의 decidable 버전을 사용할 필요가 있다는 불평 OСaml처럼 뭔가를 할 경우 그것은 당신이 계산할 수 없다). 이 표준 라이브러리에 있습니다 부울하지만 돌아 미만

Require Import Arith. 
Check lt_dec. 

Definition test (i:nat) : nat := if lt_dec i 5 then 0 else 1. 

표준 라이브러리의 테스트 실제로 두 경우 모두 교정이 증거는 사용하지 않는 이동 (함수가 무엇을 당신에게 포함하는 sumbool, 당신의 예를 들어, test에 대해 뭔가를 증명하고 싶다면 편리 할 것입니다. lt_dec 님의 타입은 sumbool (n < m) (~n < m)입니다.

교정에 대해 신경 쓰지 않았다면 다른 함수 Nat.ltb을 사용하여 부울을 반환 할 수 있습니다. 표준 라이브러리뿐만 아니라이 기능을 편리 표기법을 포함

Require Import Arith. 

Definition test (i:nat) : nat := if i <? 5 then 0 else 1. 

당신이 증거에두고 작업 할 때, 당신은 무엇 i <? 5 반환에 대해 추론하기 위하여 Nat.ltb_lt 같은 이론을 적용해야합니다.

Coq의 if b then .. else ...b이 bool 또는 sumbool 중 하나임을 유의하십시오. 사실 두 개의 생성자가있는 유도 형을 지원하며 첫 번째 생성자에 then 분기를 사용하고 두 번째 생성자에 else 분기를 사용합니다. boolsumbool에 대한 정의는 생성자에게 if 문이 예상대로 동작하도록하기 위해주의해야합니다.

+0

감사합니다. 도움이됩니다. 그러나 실제로 원하는 것은 다음과 같은 정의어 (i : nat) (n : nat) (n : nat)와 같습니다. j-i + 1 else if j = i + n-1 then else 2 * n + ij. 왜 coq는 ""i + 1 - j "라는 단어가"nat " 유형이고"Set "유형을 가지고 있다고 말합니다." ? –

+1

잘못된 평등을 사용하고있을 가능성이 높습니다.'=? '를 사용해보십시오. – ejgallego

관련 문제