행동 하위 유형을 결정할 수없는 이유는 무엇입니까?


13

이 분야에서 Liskov의 연구는 행동 하위 유형에 초점을 두 었으며,이 기사에서 논의 된 유형 시스템 안전성 외에도 하위 유형은 일부 계약에서 상위 유형이 보장하는 모든 불변량을 유지해야합니다. [3] 이 하위 유형 정의는 일반적으로 결정하기 어렵 기 때문에 유형 검사기로 확인할 수 없습니다.

보낸 사람 : http://www.wikiwand.com/en/Subtyping#/Function_types

답변:


24

oType 의 작동 계약이 T모든 입력에 대해 중지되도록하십시오. 이제 o하위 유형의 작업 이 S <: T해당 계약을 충족 하는지 여부를 결정 하십시오. 중지 문제를 방금 해결했습니다 .

보다 일반적 S::o으로 T::oif 와 동일한 함수를 계산해야합니다 S <: T. 두 프로그램이 같은 기능을 계산하는지 결정하는 것을 기능 문제 라고 하며 정지 문제를 해결하는 것과 같습니다.

일반적으로 사소한 런타임 속성을 정적으로 결정 하는 것은 거의 항상 정지 문제와 같습니다.


3
마지막 줄이 그것을 못 박았습니다. 당신이 불가능한 단계로 나아가고있는 행동 환경에서 프로그램이 무엇을 할 수 있는지에 대한 속성을 증명하고자하는 순간. 유형 시스템과 정적 분석 도구가 작동하는 이유 는 프로그램 실행 방식의 속성이 아니라 다른 언어 (프로그램 유형, 프로그램 변수 범위 등)를 처리하기 때문 입니다.
Benjamin Gruenbaum

5
@ BenjaminGruenbaum Jorg의 답변과 귀하의 의견은 정확하지만 명확히하고 싶은 미묘한 점이 있습니다. 특정 프로그램 에 대한 속성을 증명하는 것이 종종 가능합니다 . 모든 프로그램에서 작동하는 맹목적으로 따를 수있는 알고리즘은 없습니다 . Java로 작성된이 메소드를 고려하십시오. BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }특정 메소드가 항상 정수 배열 요소의 합계를 리턴하고 다른 것은 수행하지 않는다는 것을 증명하는 것은 어렵지 않습니다 (인수가 널이 아닌 경우).
Doval

1
중지 문제와 동일하지 않은 경우 종종 더 악화 됩니다. 불가능한 것은 이미 충분히 힘들지 않았기 때문입니다.
user2357112는

2
또는 Doval의 요점을 또 다른 (무딘) 방법으로 말하면, 이것이 투어 완전 언어가 흥미롭고 유용한 이유 입니다. 실제 작업을 위해 Turing-completeness (확실히 모듈 수준)가 필요하지 않은 경우가 있습니다.
Leushenko

@Doval : 아주 좋은 지적입니다. 랜덤 프로그램의 종료 및 / 또는 정확성을 입증하는 알고리즘을 가질 수는 없지만, 정확성을 입증 할 수있는 방식으로 프로그램을 작성할 수 있습니다.
Giorgio

12

프로그램의 행동에 관한 거의 모든 질문은 결정 불가능하기 때문입니다. 으로 쌀의 정리 , 형태의 의사 결정 문제 :

일부 프로그램은이 속성이있는 함수를 계산하고 다른 프로그램은이 속성이없는 함수를 계산합니다. 프로그램 P가 주어지면, P에 의해 계산 된 함수는 위에서 언급 한 속성을 가지고 있습니까?

결정할 수 없습니다. 예를 들어 입력의 제곱을 계산하는 코드와 그렇지 않은 코드를 항상 구별 할 수는 없습니다. 간단한 경우에 함수가 그렇게하거나하지 않는다는 것을 증명하는 것이 종종 가능하지만 모든 프로그램에 적용되는 일반적인 절차는 없습니다.

거의 모든 흥미로운 행동 불변은 쌀의 정리에 속한다. 왜냐하면 이러한 진술은 그 방법이 내부적으로 어떻게 보이는지, 어떤 방식으로 돌아 오는지, 특정 입력에 대한 부작용으로 인한 부작용에 대해서는 거의 이야기하지 않기 때문이다.


3
당신은 조금 명확히 할 수 있습니다 : 병리학에 관계없이 단일 프로그램이 모든 분석에 저항 할 수는 없지만 주어진 분석에 대해 적절하게 분류 할 수없는 적어도 하나의 프로그램이 존재한다는 것은 아닙니다.
Nathan Tuggy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.