수학이나 명제에서의 증명 못지 않게 엄밀한 정확성이 요구되는 컴퓨터 프로그램을 입증하는 것 또한 매우 중요하다. 정확한 프로그램이 되기 위해서는 구문 오류(syntax error)를 포함하지 않아야 하고, 예상치 못하게 끝나서도 안되며, 주어진 입력에 대해 정확한 결과를 도출해내야만 한다. 이를 위하여 프로그램의 정확성에 대한 입증이 필요하다. 프로그램의 입증은 제어구조(control structure)에서 필요한데 다음과 같은 4가지의 문장 구조를 입증한다. 순서문(Sequential statements) 조건문(Conditional statements) 반복문(Repeated statements) 무조건적 이동문(Unconditional transfer statements) 1부터 n까지의 정수값을 ..
수학적 귀납법(Mathematcal Induction) 수학적 귀납법에서는 명제 p1, p2, p3, ... pn이 사실이라고 할 때 pn+1의 경우에도 성립한다는 것을 보인다. 따라서, n이 1인 경우 성립하는 것을 보이고 또한 모든 n값에 대해 성립한다고 가정하면 n+1의 경우에도 성립하는 것을 보여주면 된다. 이때 출발점이 되는 n의 값을 '기초단계(basis)' 라고 하며, p1, p2, p3, ... pn을 '귀납 가정(inductive assumption)', pn+1의 경우에 성립됨을 보여주는 것을 '귀납 단계(inductive step)'라고 한다. 모순 증명법(proof by contradiction) 주어진 문제의 명제를 일단 부정해놓고 논리를 전개하여, 그것이 모순됨을 보임으로써 본래..
증명(proof)은 논리적 법칙을 사용하여 해당 명제나 논증이 적절한지를 입증하는 방법이다. 연역법과 귀납법 증명은 연역증명(deduction)과 귀납증명(induction)으로 나뉜다. 연역 증명은 이미 알려진 사실(진리)들이나 원리를 통해 결론을 도출하는 방법이고, 귀납 증명은 특수한 사실이나 원리로부터 확장된 결론을 도출해내는 방법이다. 연역법과 연역법의 오류 연역법의 대표적인 예시는 삼단논법이다. 이미 알려진 사실들로부터 결론을 도출해낸다. 사람들은 참수당하면 죽는다. 세종대왕은 죽었다. 따라서 세종대왕은 참수당했다. 논리적 오류가 있는 증명이지만 이미 알려진 사실(진리)로부터 결론을 도출해냈다. 이는 연역추론에 해당한다. 귀납법과 귀납법의 오류 이번에도 틀린 예시를 하나 하겠다. 칠면조의 역설이..
집합(set)은 원소(element)라고 불리는 서로 다른 객체들의 모임으로 현대 수학에서 가장 기초가 되는 개념이다. 집합은 정확하게 정의되어야 하며, 어떤 객체가 그 집합에 속하는지 아닌지를 분명히 구분할 수 있어야 한다. 집합을 표현하는 방법은 두가지가 있다. 원소나열법 : 집합의 원소들을 { } 사이에 하나씩 나열하는 방법. ex) S = { 1, 2, 3, 4, 5 } 조건제시법 : 집합의 원소들이 가지고 있는 특정한 성질을 기술하여 나타내는 방법. 표현은 S = {x | p(x)}와 같이 나타낸다. 여기서 x는 원소를 대변하는 변수이고, p(x)는 원소들이 가지고 있는 성질을 나타낸다. ex) 2부터 4까지의 자연수의 집합 : S = { x | x는 자연수이고 1 < x < 5 } 카디날리티(..
명제 중에는 값이 정해져있지 않는 변수나 객체(object)가 있어서 참과 거짓을 판별하기 힘든 경우가 있다. 즉, 변수의 값에 따라 그 명제가 참이되고 거짓이 될 수 있다. 예를들어 x²+5x+6=0 이라는 명제의 x의 값이 -2 또는 -3일 경우에는 참의 값을 가지고 그 외에는 거짓의 값을 가진다. 이런 경우 x²+5x+6=0을 만족시키는 변수가 있다고 표현한다. 이와같은 명제의 형태를 p(x)로 표시하고 p(x)를 변수 x에 대한 명제 술어(propositional predicate)라 한다. x는 3보다 크다. 는 술어인가? - x에 1을 대입하면 1 > 3 이 되며 거짓인 명제가 된다. - x에 4를 대입하면 4 > 3 이 되며 참인 명제가 된다. 즉, x는 3보다 크다. 는 술어이다. 술어를 ..
명제(proposition)란 어떤 사고를 나타내는 문장 중에서 참(true)이나 거짓(false)을 객관적이고 명확하게 구분할 수 있는 문장이나 수학적 지식을 말한다. 명제는 통상 소문자로 표시하고 각각의 진리값(Truth value)을 가진다. 이때 명제는 T(true)와 F(false)의 2가지 진리값을 가지므로 이진 논리라고 한다. 논리 연산 단순 명제 : 하나의 문장이나 식으로 구성되어 있는 명제 ex) 개는 동물이다. 합성 명제 : 여러 개의 단순 명제들이 논리 연산자들로 연결되어 만들어진 명제 ex) 개는 동물이고, 사슴벌레는 곤충이다. 논리학에서의 논리 연산자 ~ (부정, NOT) ∧ (논리곱, AND) ∨ (논리합, OR) ⊕ (배타적 논리합, Exclusive OR) → (조건, if ..
자바스크립트에는 여덟가지 자료형이 있다. 그 중 일곱개(숫자형, 문자열, 불린값 등)는 오직 하나의 데이터만 담을 수 있어 원시형(Primitive type)라고 불린다. 객체형은 원시형과 달리 다양한 데이터를 담을 수 있다. (키로 구분된 데이터 집합이나 복잡한 개체(entity)를 저장할 수 있다.) 객체는 자바스크립트의 거의 모든 면에 녹아있는 개념이므로 자바스크립트를 잘 다루려면 객체를 잘 이해하고 있어야 한다. 객체는 중괄호 {...}를 이용해 만들 수 있다. 중괄호 안에는 '키(key) : 값(value)' 쌍으로 구성된 프로퍼티(property)를 여러개 넣을 수 있는데 키에는 문자형, 값엔 모든 자료형이 허용된다. 프로퍼티 키는 프로퍼티 이름이라고도 불리운다. 서랍장을 상상하면 객체를 이해..
https://ko.javascript.info/array 배열 ko.javascript.info 순서가 있는 컬렉션을 다뤄야 할 때 객체를 사용하면 순서와 관련된 메서드가 없어 불편하다. 객체는 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 사이에 끼워 넣는것도 불가능하다. 이럴땐 순서가 있는 컬렉션을 저장할 때 쓰는 자료구조인 배열을 사용할 수 있다. 배열 선언 let array = new Array(3); console.log(array); let fruits = ['사과', '오렌지', '자두']; console.log(fruits[0]); console.log(fruits[1]); console.log(fruits[2]); 배열 수정/추..
클래스(Class)는 객체를 생성하기 위한 템플릿이다. 클래스는 데이터와 이를 조작하는 코드를 하나로 추상화한다. 자바스크립트에서 클래스는 자바스크립트 문법(?) 중 하나인 프로토타입을 이용해서 만들어졌다. 클래스는 특별한 함수 정도로 취급할 수 있다. 함수가 함수 표현식과 함수 선언을 갖듯이 클래스도 클래스 표현식과 클래스 선언문을 갖는다. 클래스로 찍어낸 객체들은 인스턴스(Instance)라고 불리운다. 모든 객체가 인스턴스가 되는 것이 아니다. 클래스로 찍어낸 객체여야만 인스턴스라고 불리운다. class Rrrr { constructor(){} function() {} function() {} } class Human { constructor(age, tall) { this.age = age; th..
객체 기본 객체는 관련된 데이터와 함수의 집합이다. 객체는 프로퍼티(Property)과 메서드(Method)로 구성된다. 프로퍼티는 명시적으로 선언된 것으로 정의할 수 있고 메서드는 동적인 개념으로 선언된 것이다. 자바스크립트에서는 객체에 선언된 함수를 메서드라고 칭한다. const DC = { age: 30; // Property state: function(behavior) { console.log('behavior'); } // Method } 상수(Constant)로 설정된 DC라는 객체이다 해당 객체의 age는 30살으로 명시되어 있다. 그래서 age는 DC 객체 내 프로퍼티이다. 해당 객체의 state는 함수로써 값에 따라 출력이 바뀐다. 따라서 state는 DC 객체 내 메서드이다. 객체 동..