어떻게하면 co.kr에서 bool true|false
을 받아들이고 bool true|false
(아래 그림 참조)를 반환하는 함수 f
가 하나의 bool에 두 번 적용될 때 true|false
가 항상 같은 값을 반환하는지 증명할 수 있습니다.f (f bool) = bool 증명하기
(f:bool -> bool)
예를 들어 함수 f
은 4 가지만 수행 할 수 있습니다. b
함수의 입력을 호출 할 수 있습니다.
- 항상 반환
true
- 항상 반환
false
- 반환
b
) 를 반환합니다. (즉, b가 true이고 부사장이면 false를 반환합니다.)
따라서 함수가 항상 true를 반환하는 경우
f (f bool) = f true = true
이 함수가 항상 false를 반환하면 다음을 얻습니다.
f (f bool) = f false = false
다른 경우에는 not b
f (f true) = f false = true
f (f false) = f true = false
를 반환 할 수 있습니다. 두 입력 가능한 경우 모두 원래 입력으로 끝납니다. 함수가 b
를 반환한다고 가정하면 마찬가지입니다.
그러면 coq에서 어떻게 증명할 수 있습니까?
Goal forall (f:bool -> bool) (b:bool), f (f b) = f b.
나는 f가 항상 참을 반환하는 것처럼 f (f 거짓) == f 참 == 참! = 거짓으로 증명할 수 없다는 것을 깨달았습니다. –
그러나 f (f (f b)) = f (b)입니다. 아마도 이것은 원하는 질문에 더 가깝습니까? 그래도 Coq에서 이것을 증명하는 방법을 모르겠습니다! –
그건 그렇고, 증명하려고하는 속성에는 이름이 있습니다 : 멱등 원. https://en.wikipedia.org/wiki/Idempotence – krokodil