程式與邏輯

12 Jul 2017

序曲

保證程式 正確性 之技術

  • 電腦程式
  • 正確性
  • 在(能)做什麼

  • 邏輯
  • 集合論
  • 遞迴函數

(不知道也沒關係!)

程式

haskell - data

1         :: Int
True      :: Bool
False     :: Bool
(7, True) :: (Int, Bool)

haskell - function

-- f(x)=x+1
f :: Int -> Int
f x = x + 1

plus1 :: Int -> Int -> Int
plus1 x y = x + y

plus2 :: (Int, Int) -> Int
plus2 (x, y) = x + y  

haskell - function cont.

plus3 :: Int -> Int -> Int
plus3 0 y = y
plus3 x y = 1 + (plus3 (x - 1) y)

haskell - local variable

plus4 :: Int -> Int -> Int
plus4 0 y = y
plus4 x y =
    let temp = plus4 (x - 1) y
    in 1 + temp

(假設 Int ≡ℕ)

func1 :: Int -> (Int, Bool)
func1 0 = (0, True)
func1 n = let (m, isEven) = func1 (n-1) in
    if isEven
    then (m    , False)
    else (m + 1, True)
  • func1 0 ⇒ (0, True)
  • func1 1 ⇒ (0, False)
  • func1 2 ⇒ (1, True)
  • func1 3 ⇒ (1, False)
  • func1 4 ⇒ (2, True)

邏輯

符號 意義
p q p 和 q
p q p 或 p
p q 若 p 則 q
¬ p 非 p

練習

p = 我今天跳祈雨舞; q = 明天會下雨

  • Q1: p q ?
  • Q2: p q ?

一階邏輯

假設: p 裡面有用到 x

符號 意義
x . px 對所有 x, px 都成立
x . px 存在有 x, px 都成立

練習

S 表示 所有奇異果的集合px 表示 x 是係金ㄟ

  • 「有某顆奇異果不是係金ㄟ」...?
    • x S. ¬ px
  • 「所有的奇異果要嘛就是係金ㄟ,不然就不是」...?
    • x S. px ∨¬ px

請問 下述邏輯句子的意思?

是所有自然數的集合(包含零)

n ∈ℕ . m ∈ℕ such that
n = 2 × m n = 2 × m + 1

正確性

某個「邏輯句子」是否為 ?

真值表

p q p q ¬ p q

T

T

T

T

T

F

F

F

F

T

T

T

F

F

T

T

某個「邏輯句子」為
如果「句子」中每個部分都為

真的是這樣嗎?

這顆奇異果係金ㄟ

  • how?!

切開來!

  • 不再信任自己的主觀經驗
    • 提供 正式的證據 來證明
    • 一套制度化形式化的驗證過程
    • 每個人都可以得到一樣的結論

也就是說..

我們對事物觀察的焦點從

  • 是否為 真實存在真理 ...

轉變為

  • 是否有 形式化的證明 可以證實其為真

  • 前者稱為 古典 邏輯 (classical)
  • 後者稱為 直構 邏輯 (intuitionistic)

古典 vs 直構

¬ p

  • [古典] p = false
  • [直構] p
  • : 不存在的東西/某種未定之物
    • 爆炸原理: anything

古典 vs 直構

¬ ¬ pp

  • [古典] ¬ ¬ p = p
  • [直構] (p )

證明

n ∈ℕ . m ∈ℕ such that
n = 2 × m n = 2 × m + 1

  • n = 0, 顯然存在偶數 m = 0 使得 0 = 2 × 0
  • 假設 n = t + 1
    • 根據 MI, 已知 n = t 時存在一個 m 使得 t = m × 2 t = m × 2 + 1
      • [case 1]: n = (m × 2)+1
      • [case 2]: n = (m × 2 + 1)+1 = (m + 1)×2

邏輯程式

邏輯

  • 用以描述「性質」、「現象」、「觀察」、「問題」
  • 例:m × n 要嘛是 0 不然就是 m + 某個自然數
    • m, n ∈ ℕ . i ∈ ℕ . m × n = 0 m × n = i + m
  • 證明其為

程式

  • 一連串的計算
  • 最終會得到 一個特定問題 的答案

func1 :: Int -> (Int, Bool)
func1 0 = (0, True)
func1 n = let (m, isEven) = func1 (n-1) in
    if isEven
    then (m    , False)
    else (m + 1, True)

Curry-Howard 對應

  • 邏輯系統型別系統
  • 邏輯陳述型別資訊
  • 形式證明電腦程式

形式邏輯系統百百種

  1. 有「程式/證明」有「型別/性質」
    • 檢查 這個「程式」能否作為該性質的「證明」
    • 產生 一個更好(執行更快)的「程式/證明」
  2. 有「型別/性質」 但是 沒有「程式/證明」
    • 自動化地 產生 「證明/程式」
    • 利用數學理論去讓「程式/證明」更容易被想/寫出來

  • 的意義?
  • 在程式上的意義?