Coq에서는 불가능하다는 인상을 받았습니다. Coq : 복잡한 표현 사이의 강제/하위 유형 지정
Parameter Arg: Type.
Parameter F X XP: Arg.
Parameter S P I PLS PI: Arg -> Type.
Parameter tree car: P X.
Parameter mary john: PLS XP.
Parameter c: PLS XP -> P XP.
Coercion c: PLS XP >-> P XP. (*Syntax error: '>->' expected after [vernac:class_rawexpr] (in [vernac:gallina_ext]).*)
그래서 단지 옆에 >->
에 표현의 유형을 설정해야되지, 입력하거나 소유 예를
Let nui := PLS XP.
Let hui := P XP.
Parameter c: nui -> hui.
Coercion c: nui >-> hui.
Parameter st: P XP -> Type.
Check st (c mary). (*st mary : Type*)
Check st mary. (*Error: The term "mary" has type "PLS XP" while it is expected to have type "P XP".*)
좋은! 이전 함수 선언을 사용하여 강제 변환을 정의 할 수 있는지 알지 못했습니다. 이 모든 것은 실제로 복잡합니다 (대부분 내 매뉴얼의 잘못입니다). 나는 [제 18 장; 예제들 (https://coq.inria.fr/refman/Reference-Manual021.html#sec674) (약간의 수면 후에 아마도 답을 얻을 것입니다) – jaam
강요를 정의 할 수 있다는 것은 매우 혼란 스럽습니다 :'Parameter c : PLS XP -> P XP. 강요 c : PLS> -> P. (* 메시지 : c는 균일 한 상속 조건을 준수하지 않습니다 *) 강제 변환. (* c *) 그래프 인쇄. (* [c] : PLS> -> P *)'그러나 아직 강압은 없다.'Check mary : P XP. (* Error : "mary"라는 단어는 "PLS XP"타입을 가지고 있지만 "P XP"타입을 가질 것입니다. *)'실제 문제는 균일 한 상속 조건을 충족시키고 있습니다. 'P x'는'P x','L x'와'S x'의 교차점 인'PLS x'의 수퍼 세트입니다. 그래서 저는 'c'가 "명시 적으로 명시 되어야만하는 강요"라고 생각할 수도 있습니다. – jaam
나는 매우 동의합니다; 실제로 "유니폼 상속을 존중하지 않는다"는 의미는 "귀하의 강압은 결코 적용을 고려하지 않을 것입니다. – ejgallego