논리와 집합 - 명제 with Python

tmkor(55)
Published in
#kr
Words
130
Reading
1 min
Listen
Play
9y

안녕하세요 tmkor@tmkor 입니다. 오늘은 프로그래밍 언어와 논리학에 기반이 되는 명제에 대하여 포스팅 해보려합니다. 사실 명제는 중학교 수학에서부터 찬찬히 배워오는 개념이라 어디선가 많이 본 내용입니다. ^^; 기본이 되는 만큼 너무나 많은 응용이 있기 때문에 한번 짚고 넘어가 보려 합니다. 기반이 되는 자료는 맛있는 해석학 책 입니다.

수학의 논리와 집합

명제와 조건

Proposition and condition

  • 명제(proposition) : true or false를 공역으로 갖는 함수이다. 프로그래밍 언어에서 IF 문의 인자는 모두 명제이다. 관행적으로 명제는 소문자 알파뱃으로 쓴다. (예: p)
  • 부정(negation) : !p
  • 논리곱(logical conjunction) : bool 대수의 곱셈은 논리식의 AND와 같다. Python에서는, p & q
  • 논리합(logical disjunction) : bool 대수의 덧셈은 논리식의 OR와 같다. Python에서는, p | q

보기 1.1.1

from functools import reduce

def isPrime(num):
    return reduce(lambda x,y:x&y, map(lambda x:num/x != int(num/x), range(2,num)))

p = 15 % 2 # 15는 홀수이다
q = isPrime(15) # 15는 소수이다.
print(p & q) # 15는 홀수인 소수이다.
print(p | q) # 15는 홀수이거나 소수이다
print(p & (not q)) # 15는 홀수이지만 소수가 아니다.

결과

0 # False
1 # True
1 # True
  • 명제함수;조건(propositional function) : 어떤 변수에 값을 대입하였을 때 참, 거짓이 판별되는 경우이다. x is int
  • 조건문;함의(logical implication) : 다른 명제의 결과와 연동되는 명제이다. $p \rightarrow q$ if p : \n return q

보기 1.1.2

def TruthTable(p,q):
    p = p
    q = q
    Kpq = p & q # 논리곱
    Apq = p | q # 논리합
    Cpq = {True:q, False:True}[p] # 조건문
    print("%10s %10s %10s %10s %10s" % (p,q,Kpq,Apq,Cpq))

def PrintTT():
    print("%10s %10s %10s %10s %10s" % ("p","q","p&q","p|q","p->q"))
    TP = [True, False]
    for (p,q) in [(p,q) for p in TP for q in TP]:
        TruthTable(p,q)

결과

         p          q        p&q        p|q       p->q
      True       True       True       True       True
      True      False      False       True      False
     False       True      False       True       True
     False      False      False      False       True