나는 (Z, Z)
에서 whatever
까지 일종의지도로 취급하는 함수 Z -> Z -> whatever
을 가지고 있는데, 이것을 FF
으로 입력합시다.Coq에서 무한 표현의 유한 부분 집합으로 계산하기
whatever
은 nix
또는 inj_whatever
에서 구성 가능한 단순한 합계입니다.
내가의 방식으로, 일부 데이터 초기화이지도 :
Definition i (x y : Z) (f : FF) : FF :=
fun x' y' =>
if andb (x =? x') (y =? y')
then inj_whatever
else f x y.
=?
이 COQ의 ZArith
에서 Z
에 부울 decidable 평등을 나타냅니다.
이제 FF
두 개에 평등을 갖고 싶습니다. functional_extensionality
을 불러도 괜찮습니다. 내가 지금하고 싶은 것은 Coq가 두 개의 균등성을 계산으로 결정하도록하는 것이다.
Definition foo := i 0 0 (i 0 (-42) (i 56 1 empty)).
:
Definition empty : FF := fun x y => nix.
이제 우리는 foo
및 foo'
, 사람들은 기능 extensionality에서 동일을 만들기 위해 어떤 임의의 값을 추가 :
, 우리는의 라인을 따라 뭔가를 생각 Definition foo' := i 0 (-42) (i 56 1 (i 0 0 empty)).
omct를 foo = foo'
으로 Coq를 결정하십시오. Ltac
레벨 항목은 무엇입니까? 실제 종료 계산? 유한 한 도메인 제한이 필요합니까?
도메인 제한은 복잡한 것입니다. f : FF -> FF
의 방식으로지도를 조작합니다. 여기서 f
은 계산이 정의 된 Z x Z
의 하위 집합을 확장 할 수 있습니다. 따라서 생각해 보니 f : FF -> FF
일 수는 없지만 f : FF -> FF_1
과 같습니다. FF_1
은 작은 정수로 확장 된 Z x Z
의 하위 집합입니다. 이와 같이, f
을 n 번 적용하면 FF_n
으로 끝나며 이는 도메인 제한 인 FF
에 n * constant
을 도메인에 해당하는 것과 같습니다. 따라서 함수 f
은 천천히 (상수 인자에 의해) FF가 정의 된 도메인을 확장합니다.
부드럽게 말하면 질문은 매우 모호하므로 해결책을 제안하는 것이 무엇이든간에 무엇을하고 싶은지 파악하기가 어렵습니다. "최소한의 완전하고 검증 가능한 예"를 제공해주십시오. – ejgallego
@ejgallego 당신은 절대적으로 옳았습니다. 나는 간단한 예를 들어 상황을 고치려고했습니다. – ScarletAmaranth
"_whatever_"등등에 필요한 평등과 같은 세부 사항을 빠뜨린 경우와 같이 여전히 내 취향에 대해 너무 모호합니다. 즉, "A -> B"함수의 경우 "A"가 유한 타입, 우선, 보편성이 공리없이 어떻게 유지 될 수 있는지, 두 번째로, 네가 적절한 프레임 워크를 사용하면 너무 많은 고통없이 계산의 평등에 평등을 반영 할 수있다. – ejgallego