함수는 ACL2에 정의되어 있으며 종료를 증명하는 데 도움이되는 측정 함수를 작성해야합니다. 이 함수의 정의입니다 :이 재귀 함수를 기반으로 측정 함수를 어떻게 결정합니까?
(defunc f (x a)
:input-contract (and (integerp x) (listp a))
:output-contract (integerp (f x a))
(cond
((endp a) 68)
((equal (len a) x) 71)
((equal (len a) (+ x 1)) 74)
((< x (len a)) (f (+ x 1) (rest a)))
(t (f (- x 1) (cons 1 a)))))
그리고 솔루션 측정 기능입니다이 (속기) :
(m x a) = (if (equal (len a) (+ x 1))
0
(abs (- (len a) x)))
우리는 기반 포함된다 측정 기능의 다른 사례를 확인할 수 있었다 함수에서 두 개의 재귀 호출. 그러나 우리는 나머지 부분을 이해하지 못하고이 측정 기능을 파악하는 과정을 거쳤습니다. 참고로
, 측정 기능 :
- 미터는 F의 파라미터 위에 네드 허용 함수 드 인터넷이고;
- m은 f와 동일한 입력 계약을 갖습니다.
- m에는 항상 자연수를 반환한다는 출력 계약이 있습니다. 재귀 호출시마다
- 이 반환되며, 재귀 호출을 발생시키는 조건 하에서 해당 재귀 호출에 대한 인수에 적용된 m은 감소합니다 ( ).
이 측정 기능을 결정하는 과정은 무엇입니까?