annotate automaton-in-agda/src/libbijection.agda @ 405:af8f630b7e60

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 18:02:04 +0900
parents cd73fe566291
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 328
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 328
diff changeset
2
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
3 module libbijection where
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Level renaming ( zero to Zero ; suc to Suc )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Nat
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
7 open import Data.Maybe
256
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
8 open import Data.List hiding ([_] ; sum )
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.Nat.Properties
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Relation.Nullary
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Data.Empty
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 328
diff changeset
12 open import Data.Unit
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
13 open import Relation.Binary.Core hiding (_⇔_)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open import Relation.Binary.Definitions
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open import Relation.Binary.PropositionalEquality
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
16 open import Function.Inverse hiding (sym)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
17 open import Function.Bijection renaming (Bijection to Bijection1)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
18 open import Function.Equality hiding (cong)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 open import logic
256
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
21 open import nat
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
23 -- record Bijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
24 -- field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
25 -- fun← : S → R
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
26 -- fun→ : R → S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
27 -- fiso← : (x : R) → fun← ( fun→ x ) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
28 -- fiso→ : (x : S ) → fun→ ( fun← x ) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
29 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
30 -- injection : {n m : Level} (R : Set n) (S : Set m) (f : R → S ) → Set (n Level.⊔ m)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
31 -- injection R S f = (x y : R) → f x ≡ f y → x ≡ y
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
32
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 open Bijection
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
35 b→injection1 : {n m : Level} (R : Set n) (S : Set m) → (b : Bijection R S) → injection S R (fun← b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
36 b→injection1 R S b x y eq = trans ( sym ( fiso→ b x ) ) (trans ( cong (λ k → fun→ b k ) eq ) ( fiso→ b y ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
37
263
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 262
diff changeset
38 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 262
diff changeset
39 -- injection as an uniquneness of bijection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 262
diff changeset
40 --
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
41 b→injection0 : {n m : Level} (R : Set n) (S : Set m) → (b : Bijection R S) → injection R S (fun→ b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
42 b→injection0 R S b x y eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
43 x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
44 ≡⟨ sym ( fiso← b x ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
45 fun← b ( fun→ b x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
46 ≡⟨ cong (λ k → fun← b k ) eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
47 fun← b ( fun→ b y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
48 ≡⟨ fiso← b y ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
49 y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
50 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
51
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
52 open import Relation.Binary using (Rel; Setoid; Symmetric; Total)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
53 open import Function.Surjection
263
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 262
diff changeset
54
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
55 ≡-Setoid : {n : Level} (R : Set n) → Setoid n n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
56 ≡-Setoid R = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
57 Carrier = R
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
58 ; _≈_ = _≡_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
59 ; isEquivalence = record { sym = sym ; refl = refl ; trans = trans }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
60 }
256
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
61
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
62
328
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
63 open import bijection
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
64 bij-Setoid : {n : Level} → Setoid (Level.suc n) n
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
65 bij-Setoid {n} = record {
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
66 Carrier = Set n
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
67 ; _≈_ = Bijection
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
68 ; isEquivalence = bijIsEquivalence -- record { sym = bi-sym _ _ ; refl = bid _ ; trans = bi-trans _ _ _ }
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
69 }
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
70
cd73fe566291 temporal logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 264
diff changeset
71
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
72 libBijection : {n m : Level} (R : Set n) (S : Set m) → Bijection R S → Bijection1 (≡-Setoid R) (≡-Setoid S)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
73 libBijection R S b = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
74 to = record { _⟨$⟩_ = λ x → fun→ b x ; cong = λ i=j → cong (fun→ b) i=j }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
75 ; bijective = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
76 injective = λ {x} {y} eq → b→injection0 R S b x y eq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
77 ; surjective = record { from = record { _⟨$⟩_ = λ x → fun← b x ; cong = λ i=j → cong (fun← b) i=j }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
78 ; right-inverse-of = λ x → fiso→ b x }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
79 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
80 }
256
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
81
264
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
82 fromBijection1 : {n m : Level} (R : Set n) (S : Set m) → Bijection1 (≡-Setoid R) (≡-Setoid S) → Bijection R S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
83 fromBijection1 R S b = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
84 fun← = Π._⟨$⟩_ (Surjective.from (Bijective.surjective (Bijection1.bijective b)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
85 ; fun→ = Π._⟨$⟩_ (Bijection1.to b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
86 ; fiso← = λ x → Bijective.injective (Bijection1.bijective b) (fb1 x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
87 ; fiso→ = Surjective.right-inverse-of (Bijective.surjective (Bijection1.bijective b))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
88 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
89 -- fun← b x ≡ fun← b y → x ≡ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
90 -- fun← (fun→ ( fun← x )) ≡ fun← x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
91 -- fun→ ( fun← x ) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
92 fb1 : (x : R) → Π._⟨$⟩_ (Bijection1.to b) (Surjective.from (Bijective.surjective (Bijection1.bijective b)) ⟨$⟩ (Bijection1.to b ⟨$⟩ x)) ≡ Π._⟨$⟩_ (Bijection1.to b) x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
93 fb1 x = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
94 Π._⟨$⟩_ (Bijection1.to b) (Surjective.from (Bijective.surjective (Bijection1.bijective b)) ⟨$⟩ (Bijection1.to b ⟨$⟩ x))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
95 ≡⟨ Surjective.right-inverse-of (Bijective.surjective (Bijection1.bijective b)) _ ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 263
diff changeset
96 Π._⟨$⟩_ (Bijection1.to b) x ∎ where open ≡-Reasoning
260
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 259
diff changeset
97