-
Notifications
You must be signed in to change notification settings - Fork 0
/
lecture3.agda
66 lines (43 loc) · 1.77 KB
/
lecture3.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
56
57
58
59
60
61
62
63
64
65
66
module lecture3 where
data _≡_ { A : Set } ( x : A ) : A → Set where
refl : x ≡ x
-- przykład równoważnego definiowania równości
data _≡'_ : ∀ { A : Set } → A → A → Set₁ where
refl : ∀ { A : Set } → ∀ { x : A } → x ≡' x
infix 4 _≡_
sym : ∀ { A : Set } → { x y : A } → x ≡ y → y ≡ x
sym refl = refl
trans : ∀ { A : Set } → { x y z : A } → x ≡ y → y ≡ z → x ≡ z
trans refl refl = refl
cong : ∀ {A B : Set} (f : A → B) {x y : A} → x ≡ y → f x ≡ f y
cong f refl = refl
subst : ∀ {A : Set} {x y : A} (P : A → Set) → x ≡ y → P x → P y
subst P refl Px = Px
module ≡-Reasoning {A : Set} where
infix 1 begin_
infixr 2 _≡⟨⟩_ step-≡
infix 3 _∎
begin_ : ∀ {x y : A} → x ≡ y → x ≡ y
begin eq = eq
_≡⟨⟩_ : ∀ (x : A) {y : A} → x ≡ y → x ≡ y
x ≡⟨⟩ eq = eq
step-≡ : ∀ (x {y z} : A) → y ≡ z → x ≡ y → x ≡ z
step-≡ x refl x≡y = x≡y
syntax step-≡ x y≡z x≡y = x ≡⟨ x≡y ⟩ y≡z
_∎ : ∀ (x : A) → x ≡ x
x ∎ = refl
open ≡-Reasoning
_≐_ : ∀ {A : Set} (x y : A) → Set₁
_≐_ {A} x y = ∀ (P : A → Set) → P x → P y
sym-≐ : ∀ { A : Set } → ∀ { x y : A } → x ≐ y → y ≐ x -- ∀ ( P ) → P y → P x
sym-≐ {A} {x} {y} x≐y P Py = x≐y Q (λ x → x) Py
where
Q : A → Set
Q z = P z → P x
refl-≐ : ∀ { A : Set } → ∀ { x : A } → x ≐ x
refl-≐ P Px = Px
trans-≐ : ∀ {A : Set} → ∀ { x y z : A } → x ≐ y → y ≐ z → x ≐ z
trans-≐ xy yz P Px = yz P ( xy P Px )
≡-implies-≐ : ∀ {A : Set} {x y : A} → x ≡ y → x ≐ y
≡-implies-≐ refl P Px = Px
-- Praca domowa: udowodnić implikację w drugą stronę