외래 재귀 함수 (fun
이 아닌 function
을 사용)를 작성하면 코드 생성기가 종료 증명을 제공하지 않으면 내 함수 실행을 거부합니다 - 심지어 sorry
- 방패로 충분합니다.Isabelle은 종결 증명없이 내 재귀 함수 코드를 생성하지 않습니다
theory Misc imports
Main
"~~/src/HOL/Library/Code_Target_Numeral"
begin
function foo :: "nat list ⇒ nat list list"
where
"foo G = (
if G = [] then
map concat [[G]]
else
concat (map foo (map (λx. [Suc x]) (tl G)))
)"
by auto
termination sorry
value "foo [1,2,3]"
end
현재 value
명령이 올바른 결과 "[]"
를 반환 여기 내 최소한의 작업 예입니다합니다 (foo
기능의 내용에 대해 걱정하지 마십시오, 그것은 증거가 아닌 사소한 종단 그냥 무작위 기능이다). 그러나 라인 termination sorry
을 제거하면 value
명령은 "foo [1, 2, 3]"
을 반환합니다.
sorry
과 이론 파일을 망칠 필요없이 코드 생성기를 foo
으로 실행할 수있는 방법이 있습니까? 나는 실제적으로 을하고 싶지 않다.은 정말 어려운 증거이기 때문에 해지 증명을해야한다.
죄송 합니다만, 종료 증거가 있기 전에 함수 선언이 전혀 의미가 없음을 확신 할 수 없습니다. 그래서 나는 하나의 코드 생성이 그러한 증명없이 가능하지 않다는 것에 기쁘다. (내 의견으로는, Isabelle 사용의 주요 포인트 중 하나이다.) 케이스에 '해고 미안'을 삽입하는 것은 당신이 정확함에 신경 쓰지 않는다고해도 나에게 지루한 것처럼 보이지 않는다. 그리고 장점은 잠재적으로 위험한 일이 발생하고 있음을 즉시 알 수 있다는 것입니다. – chris
@chris 충분히 좋습니다. 언제든지 귀하의 의견을 알려주십시오! –