Created
June 19, 2023 16:51
-
-
Save domandlj/760725d8aaa06e08fb7ea0e75a37ac54 to your computer and use it in GitHub Desktop.
Law of excluded middle and decision procedures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module LEM where | |
| open import Data.Nat | |
| open import Data.Bool | |
| open import Relation.Nullary using (¬_) | |
| open import Data.Sum using (inj₁; inj₂) renaming (_⊎_ to _∨_) | |
| open import Relation.Nullary using (Dec; yes; no) | |
| -- A predicate about if nat is even. | |
| data Even : ℕ → Set where | |
| even-zero : Even 0 | |
| even-suc : ∀ n | |
| → Even n | |
| ---------------- | |
| → Even (suc (suc n)) | |
| postulate | |
| -- The law of excluded middle. | |
| lem : ∀ {P : Set} → P ∨ ¬ P | |
| -- Can we decide if natural is even? | |
| -- Proof using LEM | |
| even-dec₁ : ∀ n → Even n ∨ ¬ Even n | |
| even-dec₁ n = lem | |
| -- We prove this but we don't get anything to compute out of it :(. | |
| -- We can give a decision procedure for the predicate Even. | |
| even? : ∀ n → Dec (Even n) | |
| even? zero = yes even-zero | |
| even? (suc zero) = no (λ ()) | |
| even? (suc (suc n)) with even? n | |
| ... | yes even-n = yes (even-suc n even-n) | |
| ... | no ¬even-n = no (lemma n ¬even-n) | |
| where | |
| lemma : ∀ n → ¬ Even n → ¬ Even (suc (suc n)) | |
| lemma n ¬even-n (even-suc .n p) = ¬even-n p | |
| -- Try to normalize this. | |
| is-even : ℕ → Bool | |
| is-even n with even? n | |
| ... | yes _ = true | |
| ... | no _ = false | |
| -- Proof not using LEM | |
| even-dec₂ : ∀ n → Even n ∨ ¬ Even n | |
| even-dec₂ n with even? n | |
| ... | yes even-n = inj₁ even-n | |
| ... | no ¬even-n = inj₂ ¬even-n | |
| -- So, if we prove this that means we must have a decision procedure to decide it. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment