3
Require Import Bool List ZArith.
Variable A: Type.
Inductive error :=
| Todo.
Inductive result (A : Type) : Type :=
Ok : A -> result A | Ko : error -> result A.
Variable bool_of_result : result A -> bool.
Variable rules : Type.
Variable boolean : Type.
Variable positiveInteger : Type.
Variable OK: result unit.
Definition dps := rules.
Inductive dpProof :=
| DpProof_depGraphProc : list
(dps * boolean * option (list positiveInteger) * option dpProof) -> dpProof.
Fixpoint dpProof' (R D: rules) (p: dpProof) {struct p}:=
match p with
| DpProof_depGraphProc cs => dpGraphProc R D cs
end
with dpGraphProc (R D: rules) cs {struct cs} :=
match cs with
| nil => Ko unit Todo
| (_, _, _, op) :: cs' =>
match op with
| None => Ko unit Todo
| Some p2 => dpProof' R D p2
end
end.
나는 그 말을 오류 메시지를 받았습니다 상호 재귀를 사용하고 중첩 된 고정 점을 사용하면 조합하여 검사 종료자를 전달합니다. 다음은 성공적으로 결합 된 코드입니다.
Fixpoint dpProof' (R D: rules) (p: dpProof) {struct p}:=
match p with
| DpProof_depGraphProc cs =>
match cs with
| nil => Ko _ Todo
| (_, _, _, op) :: cs' =>
match op with
| None => Ko unit Todo
| Some p2 => dpProof' R D p2
end
end end.
내가 종료 검사기를 통과 할 수없는 이유에 대해 더 자세히 알고 싶습니다. 논쟁의 여지를 추측 할 수 없기 때문입니까? 상호 함수를 사용하여 함수를 표현할 수있는 방법이 있습니까? dpGraphProc
?
또한 전체 목록을 확인하는 dpGraphProc
함수를 작성하려면 어떻게해야합니까? 여기서 나는 인수 cs'
을 사용하는 방법을 모른다.
코드 스 니펫에는 선언되지 않은 식별자가 많이 있으며 오류 메시지에 언급 된 'p2'가 포함되어 있지 않습니다. 당신은 정확하게 말한 메시지를 인도하는 모범을 보여줄 수 있습니까? – Virgile
이번에는 코드를 편집하고 테스트하여 오류를 제공합니다. 기다려 주셔서 감사합니다. – Quyen