-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathEqualityLecture.agda
55 lines (42 loc) · 1.19 KB
/
EqualityLecture.agda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module EqualityLecture where
{-
Jan. 16, 2020
-}
open import Data.Nat
open import Data.Nat.Properties
open import Relation.Binary.PropositionalEquality
using (_≡_; refl; sym; trans; cong; subst)
open Relation.Binary.PropositionalEquality.≡-Reasoning
using (begin_; _≡⟨_⟩_; _≡⟨⟩_; _∎)
0≡0+0 : 0 ≡ 0 + 0
0≡0+0 = refl
_ : 0 + 0 ≡ 0
_ = sym 0≡0+0
0+0≡0+0+0 : 0 + 0 ≡ 0 + (0 + 0)
0+0≡0+0+0 = cong (λ □ → 0 + □) 0≡0+0
0≡0+0+0 : 0 ≡ 0 + 0 + 0
0≡0+0+0 = trans 0≡0+0 0+0≡0+0+0
data Even : ℕ → Set where
even-0 : Even 0
even-+2 : (n : ℕ) → Even n → Even (2 + n)
even-dub : (n : ℕ) → Even (n + n)
even-dub zero = even-0
even-dub (suc n) rewrite +-comm n (suc n) =
let IH : Even (n + n)
IH = even-dub n in
even-+2 (n + n) IH
even-dub' : (n m : ℕ) → m + m ≡ n → Even n
even-dub' n m eq =
let even-m = even-dub m in
subst (λ □ → Even □) eq even-m
even-dub'' : (n m : ℕ) → m + m ≡ n → Even n
even-dub'' n m eq rewrite sym eq =
let even-m = even-dub m in
even-m
_ : 0 ≡ 0 + 0 + 0
_ =
begin
0 ≡⟨ 0≡0+0 ⟩
0 + 0 ≡⟨ 0+0≡0+0+0 ⟩
0 + 0 + 0
∎