실질적으로 계약은 명제입니다. 프로그램의 개별 실행에 대한 (정량없는) 속성을 확인할 수 있습니다. 계약 확인의 핵심은 비난이라는 개념입니다. 기본적으로 계약 위반으로 누가 잘못했는지 알고 싶어합니다. 이것은 구현 (약속 된 값을 계산하지 않음) 또는 호출자 (잘못된 종류의 값을 함수에 전달한 사람) 일 수 있습니다.
핵심 통찰력은 도메인 이론의 역 제한 구성에서 임베딩 프로젝션 쌍과 동일한 기계를 사용하여 비난을 추적 할 수 있다는 것입니다. 기본적으로 어설 션 작업에서 어설 션 쌍 작업으로 전환합니다. 하나는 프로그램 컨텍스트를 비난하고 다른 하나는 프로그램을 비난합니다. 그런 다음 어설 션 쌍을 교체하여 함수 공간의 상호 분산을 모델링 할 수 있으므로 고차 함수를 계약으로 래핑 할 수 있습니다. 예를 들어 Nick Benton의 논문 "Undoing Dynamic Typing"을 참조하십시오 .
종속 유형은 유형입니다. 유형은 특정 프로그램의 허용 여부를 주장하는 규칙을 지정합니다. 결과적으로, 그들은 비난의 개념과 같은 것들을 포함하지 않습니다. 왜냐하면 그들의 기능은 처음에 악의로 행동하는 프로그램이 존재하는 것을 막기 때문입니다. 잘 구성된 프로그램 만이 문법적으로 발언되기 때문에 비난 할 것은 없습니다. 실용적으로, 이는 한정자를 사용하여 항의 속성을 말하기 위해 종속 유형을 사용하는 것이 매우 쉽다는 것을 의미합니다 (예 : 함수가 모든 입력에 대해 작동 함).
이 두 가지 견해는 동일하지 않지만 관련이 있습니다. 기본적으로 요점은 계약을 통해 보편적 인 가치 영역으로 시작하고 계약을 사용하여 사물을 줄이는 것입니다. 그러나 유형을 사용할 때 더 작은 값의 도메인을 원하는 속성으로 지정하려고합니다. 따라서 유형 지정 관계를 통해 두 관계를 연결할 수 있습니다 (즉, 논리 관계). 예를 들어 Ahmed, Findler, Siek 및 Wadler의 최근 "Blame for All" 또는 Reynolds의 "유형의 의미 : 내재적 의미에서 외적 의미론"을 참조하십시오 .