논리와 집합 - 필요충분조건 with Python

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

안녕하세요 tmkor@tmkor 입니다. 오늘은 필요충분조건에 대하여 알아보려 합니다.

  • 대상영역 U에 대한 두 명제함수 p와 q가 있을 때, implication (조건문) p(x) -> q(x) 역시 명제함수로 바라볼 수 있다. ∀ x in U : p(x) -> q(x) 이 경우 화살표를 두줄로 그린다. p(x) ⇒ q(x)
    • 의미적으로 풀어보면, 모든 x에 대해서 p(x)가 true일 때 q(x)는 true이다.
  • 이때 p를 q이기 위한 충분조건이다. q를 p이기 위한 필요조건이라고 한다. (q가 True일 때 p는 True여도, False여도 상관없다. p->q != q->p)
  • p⇒q이고 q⇒p이면 p⇔q로 나타낸다. 이 경우 p와 q는 서로 필요충분조건(if and only if)이라고 말한다. 이 경우 p와 q의 진리여부는 같다.
  • ≡ 는 항등적으로 동일한 값을 가질때 사용한다. f(x) ≡ g(x)는 "대상 영역의 모든 x에 대하여 f(x)=g(x)가 성립한다"를 의미한다.
from functools import reduce

def p(n):
    return n*n % 2 == 1

def q(n):
    return n % 2 == 1

def oddImplication(n):
    Cpq = {True:q(n), False:True}[p(n)]
    return Cpq

def oddReverseImplication(n):
    Cqp = {True:p(n), False:True}[q(n)]
    return Cqp

def universal(predicate, domain):
    return reduce(lambda x,y:predicate(x)&predicate(y), domain)

tv1 = universal(oddImplication, range(1,100))
tv2 = universal(oddReverseImplication, range(1,100))

print("p(n) => q(n) : %s" % tv1)
print("q(n) => p(n) : %s" % tv2)
if tv1 & tv2:
    print("필요충분조건")

결과

필요충분조건