Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. module A2 where
  2.  
  3. open import Data.Nat
  4. open import Data.Bool hiding(_∧_;_∨_)
  5.  
  6. ------------------------------------------------------
  7.  
  8. -- ⊥ は証明がひとつもないような命題だから, 空集合によって表す
  9. -- 帰納的定義によって次のように表現することができる
  10. data ⊥ : Set where
  11.  
  12. -- record 型は指定された値の型を1組にまとめたもの
  13. -- つまり何も指定しなければ全体の集合 すなわち ⊤ が表現できる
  14. record ⊤ : Set where
  15.  
  16. -- 連言
  17. record _∧_ (P Q : Set) : Set where
  18. field
  19. Elim1 : P
  20. Elim2 : Q
  21.  
  22. test1 : (P Q : Set) → Set
  23. test1 p q = p ∧ q
  24.  
  25. -- 導入規則
  26. ∧Intro : {P Q : Set} → P → Q → P ∧ Q
  27. ∧Intro p q = record { Elim1 = p ; Elim2 = q }
  28.  
  29. -- 除去規則 P ∧ Q → P は ∧.Elim1 のようにかける
  30. -- 選言
  31. data _∨_ (P Q : Set) : Set where
  32. ∨Intro1 : P → P ∨ Q
  33. ∨Intro2 : Q → P ∨ Q
  34.  
  35. ∨Elim : {P Q R : Set} → P ∨ Q → (P → R) → (Q → R) → R
  36. ∨Elim (∨Intro1 a) prfP _ = prfP a
  37. ∨Elim (∨Intro2 b) _ prfQ = prfQ b
  38.  
  39. test2 : (P Q : Set) → Set
  40. test2 p q = p ∨ q
  41.  
  42. -- 含意
  43. data _⊃_ (P Q : Set) : Set where
  44. ⊃Intro : (P → Q) → P ⊃ Q
  45.  
  46. -- ⊥Elim : 偽の除去規則
  47. -- 存在のしない値は()としてmatchする
  48. ⊥Elim : {P : Set} → ⊥ → P
  49. ⊥Elim ()
  50.  
  51. -- ⊃Elim : 導入の除去規則
  52. -- P ⊃ Q 型から P → Q 型の値への写像が存在する
  53. ⊃Elim : {P Q : Set} → P ⊃ Q → P → Q
  54. ⊃Elim (⊃Intro x) q = x q
  55.  
  56. _!_ : {P Q : Set} → P ⊃ Q → P → Q
  57. _!_ = ⊃Elim
  58.  
  59. -- 否定
  60. -- 否定は p → ⊥ すなわち p ⊃ ⊥ として表現される
  61. ¬ : Set → Set
  62. ¬ p = p ⊃ ⊥
  63.  
  64.  
  65. -- 命題1
  66. -- ((A ∧ B) → (A ∨ B)) の証明
  67. -- A ∧ B が与えられたら,A から A ∨ B が作れる
  68. prop1 : (A B : Set) → (A ∧ B) ⊃ (A ∨ B)
  69. prop1 A B = ⊃Intro (λ x → ∨Intro1 (_∧_.Elim1 x))
  70.  
  71. -- 命題2
  72. -- A ∧ ¬ A → A (Elim1)
  73. -- A ∧ ¬ A → ¬ A (Elim2)
  74. -- (A → ⊥) → A → ⊥ (⊃Elim)
  75. -- ¬ A → (A → ⊥) (negの定義から)
  76. prop2 : (A : Set) → (A ∧ ¬ A) → ⊥
  77. prop2 A p = ⊃Elim (_∧_.Elim2 p) (_∧_.Elim1 p)
  78.  
  79. -- 全称
  80. data all (P : Set) (Q : P → Set) : Set where
  81. ∀Intro : ((a : P) → Q a) → all P Q
  82.  
  83. -- 存在
  84. record exist (P : Set) (Q : P → Set) : Set where
  85. field
  86. evidence : P
  87. Elim : Q evidence
  88.  
  89. ∃Intro : {P : Set} → {Q : P → Set} → (a : P) → Q a → exist P Q
  90. ∃Intro a p = record { evidence = a ; Elim = p }
  91.  
  92. -- 古典論理へ
  93. -- 古典論理では,二重否定除去(DNE)または排中律(LEM)を与える
  94. -- Agda は直観論理に基づいて構成されているので,それを拡張してやる
  95.  
  96. --postulate DNE : {P : Set} → ¬ (¬ P) → P
  97. postulate LEM : (P : Set) → (P ∨ ¬ P)
  98.  
  99. -- この二つは同じ拡張をしているので,一方からもう一方を導き出せる
  100. DNE : (P : Set) → ¬ (¬ P) ⊃ P
  101. DNE p = ⊃Intro (λ x → ∨Elim (LEM p) (λ y → y) (λ z → ⊥Elim (⊃Elim x z)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement