0
함수를 정의하려면 함수의 인수가 (적어도) n 위치 함수인지 여부에 따라 달라집니다. 초보 (실패) 시도 rT
는 False
에 모든 매핑, Coq : 인수의 인수에 패턴 매칭을 통한 함수 정의
Definition rT {y:Type}(x:y) := ltac: (match y with
| _ -> _ -> _ => exact True
| _ => exact False end).
Check prod: Type -> Type -> Type.
Compute rT prod. (*= False: Prop*)
Print rT. (*rT = fun (y : Type) (_ : y) => False: forall y : Type, y -> Prop*)
보시다시피
입니다. 왜? 일치 조항에서y
을 바꾸면 결과가 동일하게 유지됩니다.
type of x
는 COQ의 패턴 매칭 만 유도 타입의 생성자에서 작동하도록 설계되어이 뒤에 이유는? – jaam
두 가지 수준의 패턴 일치가 있습니다. 실제로 "Gallina"패턴 매칭은 유도 형 및 공조 형에서만 작동합니다. 코드에서 사용하는 "Ltac"패턴 매칭은 구문 론적이므로 Gallina 용어로 표현할 수 없습니다 (일반적으로). – Ptival