문제

몇 가지 다른 프로그래밍 언어 (이 질문의 C 및 JS)에서 몇 가지 기능의 구현의 구현의 동등성을 증명하는 데 다른 증명을 시도하고 싶습니다.

이것은 문자열에서 한 문자를 에서 교체하는 것입니다. 은 C 및 JS와 동일합니다.

JS에서, 예를 들어, 문자열은 불변 입니다. href="https://www.tutorialride.com/c-strings-program/replace-a-caracter-in-string-c-program.htm"rel="nofollow noreferrer"> 문자열은 mutable . JS 에서이 작업을 수행해야 할 수도 있습니다.

functioni replaceAt(string, index, replacement) {
  return string.substr(0, index) + replacement + string.substr(index + replacement.length)
}
.

C에서 이렇게하는 동안 다음과 같이하십시오 :

#include<stdio.h>

int
main() {
  char string[11] = "hello world";
  string[1] = 'i';
  printf("%s", string);
  return 0;
}
.

기본적으로, 나는 감지 효과 또는 원하는 결과 에 대해 에 대한 예를 들어 제작하려고 노력하고 있습니다 강력한> 똑같은 . 즉, 최종 결과는 문자가 특정 위치 (각 언어의 동일한 위치)로 대체되었다는 것입니다. 하나의 언어로 끈은 변형 이었지만, 다른 하나는 불변 이었다. 여기에 이들이 해당하는 증거를 보려면 여기에 가져 가야하는 것은 무엇입니까? 우리는 "부분적인 동등성"또는 "인식 된 동등성"의 개념을 어떻게 포착합니까? (그 결과, 결과는 대략 동일합니다. 그래서 우리는 어떤 사양과 관련하여 이것들이 동일하다는 증명서를 만들고 싶습니다.

도움이 되었습니까?

해결책

나는 원하는 공식적인 정의를 작성한 다음 구현의 정확성을 증명하는 공식적인 정의를 작성하여 시작합니다.

다음 공리 정의를 고려하십시오.

$$ replenAt : String * \ MathBB Z * char \ to string $$

$$ \ FORALL C : CHAR. (\ forall i \ in \ mathbb z ~. ~ replace (``, i, i, c)=``) $$

$$ \ FORALL C : CHAR. (\ forall s : string. (\ forall i \ in 0 .. len (s, i, c) [i]= c)) $$

$$ \ FORALL C : CHAR. (\ forall s : string) (\ forall i \ in 0 .. len (s) -1 ~. ~ len (replaceeat (s, i, c))= len (s)) $$ < / P>

$$ \ forall C : char. (\ forall s : string. (\ forall i, j \ 0..len -1. -1. i \ neq j \ replaceat (s, i, c) [j]= s [j]))) $$

$$ \ forall C : char. (\ forall s : string) (\ forall i \ in \ mathbb z. \ geq len \ \ \ replace (s) , i, c)= s)) $$

이 공리에 대한 각 구현의 정확성을 증명할 수있는 경우 나는 그것이 동등 물을 말할 것입니다. 현재 c 구현은 기능조차되지 않습니다. JavaScript 함수는 문자열이 아니라 char가 아닙니다. 그 중 어느 것도 입력보다 큰 색인에 대해 정의되지 않습니다.

구현에 대한 구현과 각 언어의 구현 모델에 많은 차이가 있으므로 의미가 있지 않다고 생각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top