annotate Putil.agda @ 135:4e2d272b4bcc

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Sep 2020 12:29:58 +0900
parents d6ae92b8b5bc
children d880595eae30
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
2 module Putil where
0
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Level hiding ( suc ; zero )
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Algebra
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Algebra.Structures
112
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
7 open import Data.Fin hiding ( _<_ ; _≤_ ; _-_ ; _+_ ; _≟_)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
8 open import Data.Fin.Properties hiding ( <-trans ; ≤-trans ; ≤-irrelevant ; _≟_ ) renaming ( <-cmp to <-fcmp )
0
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.Fin.Permutation
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Function hiding (id ; flip)
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Function.Inverse as Inverse using (_↔_; Inverse; _InverseOf_)
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Function.LeftInverse using ( _LeftInverseOf_ )
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Function.Equality using (Π)
17
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
14 open import Data.Nat -- using (ℕ; suc; zero; s≤s ; z≤n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
15 open import Data.Nat.Properties -- using (<-trans)
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
16 open import Relation.Binary.PropositionalEquality
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
17 open import Data.List using (List; []; _∷_ ; length ; _++_ ; head ; tail ) renaming (reverse to rev )
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
18 open import nat
0
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
20 open import Symmetric
0
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
dc677bac3c54 Permutation group
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
23 open import Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
24 open import Data.Empty
17
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
25 open import Relation.Binary.Core
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
26 open import Relation.Binary.Definitions
17
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
27 open import fin
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
28
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
29 -- An inductive construction of permutation
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
30
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
31 pprep : {n : ℕ } → Permutation n n → Permutation (suc n) (suc n)
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
32 pprep {n} perm = permutation p→ p← record { left-inverse-of = piso→ ; right-inverse-of = piso← } where
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
33 p→ : Fin (suc n) → Fin (suc n)
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
34 p→ zero = zero
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
35 p→ (suc x) = suc ( perm ⟨$⟩ʳ x)
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
36
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
37 p← : Fin (suc n) → Fin (suc n)
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
38 p← zero = zero
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
39 p← (suc x) = suc ( perm ⟨$⟩ˡ x)
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
40
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
41 piso← : (x : Fin (suc n)) → p→ ( p← x ) ≡ x
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
42 piso← zero = refl
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
43 piso← (suc x) = cong (λ k → suc k ) (inverseʳ perm)
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
44
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
45 piso→ : (x : Fin (suc n)) → p← ( p→ x ) ≡ x
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
46 piso→ zero = refl
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
47 piso→ (suc x) = cong (λ k → suc k ) (inverseˡ perm)
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
48
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
49 pswap : {n : ℕ } → Permutation n n → Permutation (suc (suc n)) (suc (suc n ))
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
50 pswap {n} perm = permutation p→ p← record { left-inverse-of = piso→ ; right-inverse-of = piso← } where
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
51 p→ : Fin (suc (suc n)) → Fin (suc (suc n))
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
52 p→ zero = suc zero
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
53 p→ (suc zero) = zero
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
54 p→ (suc (suc x)) = suc ( suc ( perm ⟨$⟩ʳ x) )
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
55
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
56 p← : Fin (suc (suc n)) → Fin (suc (suc n))
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
57 p← zero = suc zero
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
58 p← (suc zero) = zero
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
59 p← (suc (suc x)) = suc ( suc ( perm ⟨$⟩ˡ x) )
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
60
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
61 piso← : (x : Fin (suc (suc n)) ) → p→ ( p← x ) ≡ x
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
62 piso← zero = refl
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
63 piso← (suc zero) = refl
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
64 piso← (suc (suc x)) = cong (λ k → suc (suc k) ) (inverseʳ perm)
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
65
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
66 piso→ : (x : Fin (suc (suc n)) ) → p← ( p→ x ) ≡ x
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
67 piso→ zero = refl
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
68 piso→ (suc zero) = refl
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
69 piso→ (suc (suc x)) = cong (λ k → suc (suc k) ) (inverseˡ perm)
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
70
44
9ce6141ef479 start again
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
71 psawpn : {n : ℕ} → 1 < n → Permutation n n
9ce6141ef479 start again
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
72 psawpn {suc zero} (s≤s ())
9ce6141ef479 start again
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
73 psawpn {suc n} (s≤s (s≤s x)) = pswap pid
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
74
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
75 pfill : { n m : ℕ } → m ≤ n → Permutation m m → Permutation n n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
76 pfill {n} {m} m≤n perm = pfill1 (n - m) (n-m<n n m ) (subst (λ k → Permutation k k ) (n-n-m=m m≤n ) perm) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
77 pfill1 : (i : ℕ ) → i ≤ n → Permutation (n - i) (n - i) → Permutation n n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
78 pfill1 0 _ perm = perm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
79 pfill1 (suc i) i<n perm = pfill1 i (≤to< i<n) (subst (λ k → Permutation k k ) (si-sn=i-n i<n ) ( pprep perm ) )
34
c9dbbe12a03b inductive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
80
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
81 --
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
82 -- psawpim (inseert swap at position m )
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
83 --
45
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
84 psawpim : {n m : ℕ} → suc (suc m) ≤ n → Permutation n n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
85 psawpim {n} {m} m≤n = pfill m≤n ( psawpn (s≤s (s≤s z≤n)) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
86
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
87 n≤ : (i : ℕ ) → {j : ℕ } → i ≤ i + j
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
88 n≤ (zero) {j} = z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
89 n≤ (suc i) {j} = s≤s ( n≤ i )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
91 lem0 : {n : ℕ } → n ≤ n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
92 lem0 {zero} = z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
93 lem0 {suc n} = s≤s lem0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
95 lem00 : {n m : ℕ } → n ≡ m → n ≤ m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
96 lem00 refl = lem0
44
9ce6141ef479 start again
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
97
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
98 plist1 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
99 plist1 {n} perm zero _ = toℕ ( perm ⟨$⟩ˡ (fromℕ< {zero} (s≤s z≤n))) ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
100 plist1 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ˡ (fromℕ< (s≤s lt))) ∷ plist1 perm i (<-trans lt a<sa)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
101
37
32db08b3c1a3 emumelation done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
102 plist : {n : ℕ} → Permutation n n → List ℕ
32db08b3c1a3 emumelation done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
103 plist {0} perm = []
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
104 plist {suc n} perm = rev (plist1 perm n a<sa)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
105
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
106 --
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
107 -- from n-1 length create n length inserting new element at position m
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
108 --
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
109 -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
110 -- 1 ∷ 0 ∷ 2 ∷ 3 ∷ [] plist ( pins {3} (n≤ 1) ) 1 ∷ 0 ∷ 2 ∷ 3 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
111 -- 1 ∷ 2 ∷ 0 ∷ 3 ∷ [] plist ( pins {3} (n≤ 2) ) 2 ∷ 0 ∷ 1 ∷ 3 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
112 -- 1 ∷ 2 ∷ 3 ∷ 0 ∷ [] plist ( pins {3} (n≤ 3) ) 3 ∷ 0 ∷ 1 ∷ 2 ∷ []
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
113 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
114 -- defined by pprep and pswap
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
115 --
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
116 -- pins : {n m : ℕ} → m ≤ n → Permutation (suc n) (suc n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
117 -- pins {_} {zero} _ = pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
118 -- pins {suc _} {suc zero} _ = pswap pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
119 -- pins {suc (suc n)} {suc m} (s≤s m<n) = pins1 (suc m) (suc (suc n)) lem0 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
120 -- pins1 : (i j : ℕ ) → j ≤ suc (suc n) → Permutation (suc (suc (suc n ))) (suc (suc (suc n)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
121 -- pins1 _ zero _ = pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
122 -- pins1 zero _ _ = pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
123 -- pins1 (suc i) (suc j) (s≤s si≤n) = psawpim {suc (suc (suc n))} {j} (s≤s (s≤s si≤n)) ∘ₚ pins1 i j (≤-trans si≤n a≤sa )
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
124
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
125 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
126 open ≡-Reasoning
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
127
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
128 pins : {n m : ℕ} → m ≤ n → Permutation (suc n) (suc n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
129 pins {_} {zero} _ = pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
130 pins {suc n} {suc m} (s≤s m≤n) = permutation p← p→ record { left-inverse-of = piso← ; right-inverse-of = piso→ } where
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
132 next : Fin (suc (suc n)) → Fin (suc (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
133 next zero = suc zero
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
134 next (suc x) = fromℕ< (≤-trans (fin<n {_} {x} ) a≤sa )
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
136 p→ : Fin (suc (suc n)) → Fin (suc (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
137 p→ x with <-cmp (toℕ x) (suc m)
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
138 ... | tri< a ¬b ¬c = fromℕ< (≤-trans (s≤s a) (s≤s (s≤s m≤n) ))
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
139 ... | tri≈ ¬a b ¬c = zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
140 ... | tri> ¬a ¬b c = x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
141
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
142 p← : Fin (suc (suc n)) → Fin (suc (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
143 p← zero = fromℕ< (s≤s (s≤s m≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
144 p← (suc x) with <-cmp (toℕ x) (suc m)
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
145 ... | tri< a ¬b ¬c = fromℕ< (≤-trans (fin<n {_} {x}) a≤sa )
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
146 ... | tri≈ ¬a b ¬c = suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
147 ... | tri> ¬a ¬b c = suc x
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
148
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
149 mm : toℕ (fromℕ< {suc m} {suc (suc n)} (s≤s (s≤s m≤n))) ≡ suc m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
150 mm = toℕ-fromℕ< (s≤s (s≤s m≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
151
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
152 mma : (x : Fin (suc n) ) → suc (toℕ x) ≤ suc m → toℕ ( fromℕ< (≤-trans (fin<n {_} {x}) a≤sa ) ) ≤ m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
153 mma x (s≤s x<sm) = subst (λ k → k ≤ m) (sym (toℕ-fromℕ< (≤-trans fin<n a≤sa ) )) x<sm
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
154
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
155 p3 : (x : Fin (suc n) ) → toℕ (fromℕ< (≤-trans (fin<n {_} {suc x} ) (s≤s a≤sa))) ≡ suc (toℕ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
156 p3 x = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
157 toℕ (fromℕ< (≤-trans (fin<n {_} {suc x} ) (s≤s a≤sa)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
158 ≡⟨ toℕ-fromℕ< ( s≤s ( ≤-trans fin<n a≤sa ) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
159 suc (toℕ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
160
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
162 piso→ : (x : Fin (suc (suc n)) ) → p← ( p→ x ) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
163 piso→ zero with <-cmp (toℕ (fromℕ< (≤-trans (s≤s z≤n) (s≤s (s≤s m≤n) )))) (suc m)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
164 ... | tri< a ¬b ¬c = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
165 piso→ (suc x) with <-cmp (toℕ (suc x)) (suc m)
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
166 ... | tri≈ ¬a refl ¬c = p13 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
167 p13 : fromℕ< (s≤s (s≤s m≤n)) ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
168 p13 = cong (λ k → suc k ) (fromℕ<-toℕ _ (s≤s m≤n) )
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
169 ... | tri> ¬a ¬b c = p16 (suc x) refl where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
170 p16 : (y : Fin (suc (suc n))) → y ≡ suc x → p← y ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
171 p16 zero eq = ⊥-elim ( nat-≡< (cong (λ k → suc (toℕ k) ) eq) (s≤s (s≤s (z≤n))))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
172 p16 (suc y) eq with <-cmp (toℕ y) (suc m) -- suc (suc m) < toℕ (suc x)
96
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
173 ... | tri< a ¬b ¬c = ⊥-elim ( nat-≡< refl ( ≤-trans c (subst (λ k → k < suc m) p17 a )) ) where
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
174 -- x = suc m case, c : suc (suc m) ≤ suc (toℕ x), a : suc (toℕ y) ≤ suc m, suc y ≡ suc x
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
175 p17 : toℕ y ≡ toℕ x
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
176 p17 with <-cmp (toℕ y) (toℕ x) | cong toℕ eq
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
177 ... | tri< a ¬b ¬c | seq = ⊥-elim ( nat-≡< seq (s≤s a) )
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
178 ... | tri≈ ¬a b ¬c | seq = b
b43c4a7c57d9 pins done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
179 ... | tri> ¬a ¬b c | seq = ⊥-elim ( nat-≡< (sym seq) (s≤s c))
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
180 ... | tri≈ ¬a b ¬c = eq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 94
diff changeset
181 ... | tri> ¬a ¬b c₁ = eq
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
182 ... | tri< a ¬b ¬c = p10 (fromℕ< (≤-trans (s≤s a) (s≤s (s≤s m≤n) ))) refl where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
183 p10 : (y : Fin (suc (suc n)) ) → y ≡ fromℕ< (≤-trans (s≤s a) (s≤s (s≤s m≤n) )) → p← y ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
184 p10 zero ()
93
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
185 p10 (suc y) eq = p15 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
186 p12 : toℕ y ≡ suc (toℕ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
187 p12 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
188 toℕ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
189 ≡⟨ cong (λ k → Data.Nat.pred (toℕ k)) eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
190 toℕ (fromℕ< (≤-trans a (s≤s m≤n)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
191 ≡⟨ toℕ-fromℕ< {suc (toℕ x)} {suc n} (≤-trans a (s≤s m≤n)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
192 suc (toℕ x)
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
193
93
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
194 p15 : p← (suc y) ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
195 p15 with <-cmp (toℕ y) (suc m) -- eq : suc y ≡ suc (suc (fromℕ< (≤-pred (≤-trans a (s≤s m≤n))))) , a : suc x < suc m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
196 ... | tri< a₁ ¬b ¬c = p11 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
197 p11 : fromℕ< (≤-trans (fin<n {_} {y}) a≤sa ) ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
198 p11 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
199 fromℕ< (≤-trans (fin<n {_} {y}) a≤sa )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
200 ≡⟨ fromℕ<-irrelevant _ _ p12 _ (s≤s (fin<n {suc n})) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
201 suc (fromℕ< (fin<n {suc n} {x} ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
202 ≡⟨ cong suc (fromℕ<-toℕ x _ ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
203 suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
204
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
205 ... | tri≈ ¬a b ¬c = ⊥-elim ( nat-≡< b (subst (λ k → k < suc m) (sym p12) a )) -- suc x < suc m -> y = suc x → toℕ y < suc m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 92
diff changeset
206 ... | tri> ¬a ¬b c = ⊥-elim ( nat-<> c (subst (λ k → k < suc m) (sym p12) a ))
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 91
diff changeset
207
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
208 piso← : (x : Fin (suc (suc n)) ) → p→ ( p← x ) ≡ x
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
209 piso← zero with <-cmp (toℕ (fromℕ< (s≤s (s≤s m≤n)))) (suc m) | mm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
210 ... | tri< a ¬b ¬c | t = ⊥-elim ( ¬b t )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
211 ... | tri≈ ¬a b ¬c | t = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
212 ... | tri> ¬a ¬b c | t = ⊥-elim ( ¬b t )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
213 piso← (suc x) with <-cmp (toℕ x) (suc m)
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
214 ... | tri> ¬a ¬b c with <-cmp (toℕ (suc x)) (suc m)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
215 ... | tri< a ¬b₁ ¬c = ⊥-elim ( nat-<> a (<-trans c a<sa ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
216 ... | tri≈ ¬a₁ b ¬c = ⊥-elim ( nat-≡< (sym b) (<-trans c a<sa ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
217 ... | tri> ¬a₁ ¬b₁ c₁ = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
218 piso← (suc x) | tri≈ ¬a b ¬c with <-cmp (toℕ (suc x)) (suc m)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
219 ... | tri< a ¬b ¬c₁ = ⊥-elim ( nat-≡< b (<-trans a<sa a) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
220 ... | tri≈ ¬a₁ refl ¬c₁ = ⊥-elim ( nat-≡< b a<sa )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
221 ... | tri> ¬a₁ ¬b c = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
222 piso← (suc x) | tri< a ¬b ¬c with <-cmp (toℕ ( fromℕ< (≤-trans (fin<n {_} {x}) a≤sa ) )) (suc m)
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
223 ... | tri≈ ¬a b ¬c₁ = ⊥-elim ( ¬a (s≤s (mma x a)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
224 ... | tri> ¬a ¬b₁ c = ⊥-elim ( ¬a (s≤s (mma x a)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
225 ... | tri< a₁ ¬b₁ ¬c₁ = p0 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
226 p2 : suc (suc (toℕ x)) ≤ suc (suc n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
227 p2 = s≤s (fin<n {suc n} {x})
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
228 p6 : suc (toℕ (fromℕ< (≤-trans (fin<n {_} {suc x}) (s≤s a≤sa)))) ≤ suc (suc n)
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
229 p6 = s≤s (≤-trans a₁ (s≤s m≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
230 p0 : fromℕ< (≤-trans (s≤s a₁) (s≤s (s≤s m≤n) )) ≡ suc x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
231 p0 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
232 fromℕ< (≤-trans (s≤s a₁) (s≤s (s≤s m≤n) ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
233 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
234 fromℕ< (s≤s (≤-trans a₁ (s≤s m≤n)))
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
235 ≡⟨ lemma10 (p3 x) {p6} {p2} ⟩
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
236 fromℕ< ( s≤s (fin<n {suc n} {x}) )
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
237 ≡⟨⟩
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
238 suc (fromℕ< (fin<n {suc n} {x} ))
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
239 ≡⟨ cong suc (fromℕ<-toℕ x _ ) ⟩
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
240 suc x
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
241
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 89
diff changeset
242
94
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
243 t7 = plist (pins {3} (n≤ 3)) ∷ plist (flip ( pins {3} (n≤ 3) )) ∷ plist ( pins {3} (n≤ 3) ∘ₚ flip ( pins {3} (n≤ 3))) ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 93
diff changeset
244 -- t8 = {!!}
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 88
diff changeset
245
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
246 open import logic
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
247
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
248 open _∧_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
249
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
250 perm1 : {perm : Permutation 1 1 } {q : Fin 1} → (perm ⟨$⟩ʳ q ≡ # 0) ∧ ((perm ⟨$⟩ˡ q ≡ # 0))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
251 perm1 {p} {q} = ⟪ perm01 _ _ , perm00 _ _ ⟫ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
252 perm01 : (x y : Fin 1) → (p ⟨$⟩ʳ x) ≡ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
253 perm01 x y with p ⟨$⟩ʳ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
254 perm01 zero zero | zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
255 perm00 : (x y : Fin 1) → (p ⟨$⟩ˡ x) ≡ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
256 perm00 x y with p ⟨$⟩ˡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
257 perm00 zero zero | zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
258
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
259
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
260 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
261 -- find insertion point of pins
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
262 ----
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
263 p=0 : {n : ℕ } → (perm : Permutation (suc n) (suc n) ) → ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0)) ≡ # 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
264 p=0 {zero} perm with ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
265 ... | zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
266 p=0 {suc n} perm with perm ⟨$⟩ʳ (# 0) | inspect (_⟨$⟩ʳ_ perm ) (# 0)| toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) | inspect toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
267 ... | zero | record { eq = e} | m<n | _ = p001 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
268 p001 : perm ⟨$⟩ˡ ( pins m<n ⟨$⟩ʳ zero) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
269 p001 = subst (λ k → perm ⟨$⟩ˡ k ≡ zero ) e (inverseˡ perm)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
270 ... | suc t | record { eq = e } | m<n | record { eq = e1 } = p002 where -- m<n : suc (toℕ t) ≤ suc n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
271 p002 : perm ⟨$⟩ˡ ( pins m<n ⟨$⟩ʳ zero) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
272 p002 = p005 zero (toℕ t) refl m<n refl where -- suc (toℕ t) ≤ suc n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
273 p003 : (s : Fin (suc (suc n))) → s ≡ (perm ⟨$⟩ʳ (# 0)) → perm ⟨$⟩ˡ s ≡ # 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
274 p003 s eq = subst (λ k → perm ⟨$⟩ˡ k ≡ zero ) (sym eq) (inverseˡ perm)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
275 p005 : (x : Fin (suc (suc n))) → (m : ℕ ) → x ≡ zero → (m≤n : suc m ≤ suc n ) → m ≡ toℕ t → perm ⟨$⟩ˡ ( pins m≤n ⟨$⟩ʳ zero) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
276 p005 zero m eq (s≤s m≤n) meq = p004 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
277 p004 : perm ⟨$⟩ˡ (fromℕ< (s≤s (s≤s m≤n))) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
278 p004 = p003 (fromℕ< (s≤s (s≤s m≤n))) (
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
279 begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
280 fromℕ< (s≤s (s≤s m≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
281 ≡⟨ fromℕ<-irrelevant _ _ (cong suc meq) (s≤s (s≤s m≤n)) (subst (λ k → suc k < suc (suc n)) meq (s≤s (s≤s m≤n)) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
282 fromℕ< (subst (λ k → suc k < suc (suc n)) meq (s≤s (s≤s m≤n)) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
283 ≡⟨ fromℕ<-toℕ {suc (suc n)} (suc t) (subst (λ k → suc k < suc (suc n)) meq (s≤s (s≤s m≤n)) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
284 suc t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
285 ≡⟨ sym e ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
286 (perm ⟨$⟩ʳ (# 0))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
287 ∎ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
288
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
289 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
290 -- other elements are preserved in pins
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
291 ----
101
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
292 px=x : {n : ℕ } → (x : Fin (suc n)) → pins ( toℕ≤pred[n] x ) ⟨$⟩ʳ (# 0) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
293 px=x {n} zero = refl
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
294 px=x {suc n} (suc x) = p001 where
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
295 p002 : fromℕ< (s≤s (toℕ≤pred[n] x)) ≡ x
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
296 p002 = fromℕ<-toℕ x (s≤s (toℕ≤pred[n] x))
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
297 p001 : (pins (toℕ≤pred[n] (suc x)) ⟨$⟩ʳ (# 0)) ≡ suc x
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
298 p001 with <-cmp 0 ((toℕ x))
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
299 ... | tri< a ¬b ¬c = cong suc p002
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
300 ... | tri≈ ¬a b ¬c = cong suc p002
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
301
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
302 -- pp : {n : ℕ } → (perm : Permutation (suc n) (suc n) ) → Fin (suc n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
303 -- pp perm → (( perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
304
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
305 plist2 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
306 plist2 {n} perm zero _ = toℕ ( perm ⟨$⟩ʳ (fromℕ< {zero} (s≤s z≤n))) ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
307 plist2 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ʳ (fromℕ< (s≤s lt))) ∷ plist2 perm i (<-trans lt a<sa)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
308
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
309 plist0 : {n : ℕ} → Permutation n n → List ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
310 plist0 {0} perm = []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
311 plist0 {suc n} perm = plist2 perm n a<sa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
312
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
313 open _=p=_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
314
86
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
315 --
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
316 -- plist cong
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
317 --
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
318 ←pleq : {n : ℕ} → (x y : Permutation n n ) → x =p= y → plist0 x ≡ plist0 y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
319 ←pleq {zero} x y eq = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
320 ←pleq {suc n} x y eq = ←pleq1 n a<sa where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
321 ←pleq1 : (i : ℕ ) → (i<sn : i < suc n ) → plist2 x i i<sn ≡ plist2 y i i<sn
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
322 ←pleq1 zero _ = cong ( λ k → toℕ k ∷ [] ) ( peq eq (fromℕ< {zero} (s≤s z≤n)))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
323 ←pleq1 (suc i) (s≤s lt) = cong₂ ( λ j k → toℕ j ∷ k ) ( peq eq (fromℕ< (s≤s lt))) ( ←pleq1 i (<-trans lt a<sa) )
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
324
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
325 headeq : {A : Set } → {x y : A } → {xt yt : List A } → (x ∷ xt) ≡ (y ∷ yt) → x ≡ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
326 headeq refl = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
327
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
328 taileq : {A : Set } → {x y : A } → {xt yt : List A } → (x ∷ xt) ≡ (y ∷ yt) → xt ≡ yt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
329 taileq refl = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
330
86
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
331 --
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
332 -- plist injection / equalizer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
333 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
334 -- if plist0 of two perm looks the same, the permutations are the same
86
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
335 --
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
336 pleq : {n : ℕ} → (x y : Permutation n n ) → plist0 x ≡ plist0 y → x =p= y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
337 pleq {0} x y refl = record { peq = λ q → pleq0 q } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
338 pleq0 : (q : Fin 0 ) → (x ⟨$⟩ʳ q) ≡ (y ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
339 pleq0 ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
340 pleq {suc n} x y eq = record { peq = λ q → pleq1 n a<sa eq q fin<n } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
341 pleq1 : (i : ℕ ) → (i<sn : i < suc n ) → plist2 x i i<sn ≡ plist2 y i i<sn → (q : Fin (suc n)) → toℕ q < suc i → x ⟨$⟩ʳ q ≡ y ⟨$⟩ʳ q
81
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
342 pleq1 zero i<sn eq q q<i with <-cmp (toℕ q) zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
343 ... | tri< () ¬b ¬c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
344 ... | tri> ¬a ¬b c = ⊥-elim (nat-≤> c q<i )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
345 ... | tri≈ ¬a b ¬c = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
346 x ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
347 ≡⟨ cong ( λ k → x ⟨$⟩ʳ k ) (toℕ-injective b )⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
348 x ⟨$⟩ʳ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
349 ≡⟨ toℕ-injective (headeq eq) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
350 y ⟨$⟩ʳ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
351 ≡⟨ cong ( λ k → y ⟨$⟩ʳ k ) (sym (toℕ-injective b )) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
352 y ⟨$⟩ʳ q
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
353
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
354 pleq1 (suc i) (s≤s i<sn) eq q q<i with <-cmp (toℕ q) (suc i)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
355 ... | tri< a ¬b ¬c = pleq1 i (<-trans i<sn a<sa ) (taileq eq) q a
81
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
356 ... | tri> ¬a ¬b c = ⊥-elim (nat-≤> c q<i )
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
357 ... | tri≈ ¬a b ¬c = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
358 x ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
359 ≡⟨ cong (λ k → x ⟨$⟩ʳ k) (pleq3 b) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
360 x ⟨$⟩ʳ (suc (fromℕ< i<sn))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
361 ≡⟨ toℕ-injective pleq2 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
362 y ⟨$⟩ʳ (suc (fromℕ< i<sn))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
363 ≡⟨ cong (λ k → y ⟨$⟩ʳ k) (sym (pleq3 b)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
364 y ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
365 ∎ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
366 pleq3 : toℕ q ≡ suc i → q ≡ suc (fromℕ< i<sn)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
367 pleq3 tq=si = toℕ-injective ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
368 toℕ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
369 ≡⟨ b ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
370 suc i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
371 ≡⟨ sym (toℕ-fromℕ< (s≤s i<sn)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
372 toℕ (fromℕ< (s≤s i<sn))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
373 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
374 toℕ (suc (fromℕ< i<sn))
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
375 ∎ )
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
376 pleq2 : toℕ ( x ⟨$⟩ʳ (suc (fromℕ< i<sn)) ) ≡ toℕ ( y ⟨$⟩ʳ (suc (fromℕ< i<sn)) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 75
diff changeset
377 pleq2 = headeq eq
37
32db08b3c1a3 emumelation done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
378
112
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
379 is-=p= : {n : ℕ} → (x y : Permutation n n ) → Dec (x =p= y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
380 is-=p= {zero} x y = yes record { peq = λ () }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
381 is-=p= {suc n} x y with ℕL-eq? (plist0 x ) ( plist0 y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
382 ... | yes t = yes (pleq x y t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
383 ... | no t = no ( contra-position (←pleq x y) t )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
384
87
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
385 pprep-cong : {n : ℕ} → {x y : Permutation n n } → x =p= y → pprep x =p= pprep y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
386 pprep-cong {n} {x} {y} x=y = record { peq = pprep-cong1 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
387 pprep-cong1 : (q : Fin (suc n)) → (pprep x ⟨$⟩ʳ q) ≡ (pprep y ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
388 pprep-cong1 zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
389 pprep-cong1 (suc q) = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
390 pprep x ⟨$⟩ʳ suc q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
391 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
392 suc ( x ⟨$⟩ʳ q )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
393 ≡⟨ cong ( λ k → suc k ) ( peq x=y q ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
394 suc ( y ⟨$⟩ʳ q )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
395 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
396 pprep y ⟨$⟩ʳ suc q
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
397
87
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
398
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
399 pprep-dist : {n : ℕ} → {x y : Permutation n n } → pprep (x ∘ₚ y) =p= (pprep x ∘ₚ pprep y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
400 pprep-dist {n} {x} {y} = record { peq = pprep-dist1 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
401 pprep-dist1 : (q : Fin (suc n)) → (pprep (x ∘ₚ y) ⟨$⟩ʳ q) ≡ ((pprep x ∘ₚ pprep y) ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
402 pprep-dist1 zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
403 pprep-dist1 (suc q) = cong ( λ k → suc k ) refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
404
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
405 pswap-cong : {n : ℕ} → {x y : Permutation n n } → x =p= y → pswap x =p= pswap y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
406 pswap-cong {n} {x} {y} x=y = record { peq = pswap-cong1 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
407 pswap-cong1 : (q : Fin (suc (suc n))) → (pswap x ⟨$⟩ʳ q) ≡ (pswap y ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
408 pswap-cong1 zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
409 pswap-cong1 (suc zero) = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
410 pswap-cong1 (suc (suc q)) = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
411 pswap x ⟨$⟩ʳ suc (suc q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
412 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
413 suc (suc (x ⟨$⟩ʳ q))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
414 ≡⟨ cong ( λ k → suc (suc k) ) ( peq x=y q ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
415 suc (suc (y ⟨$⟩ʳ q))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
416 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
417 pswap y ⟨$⟩ʳ suc (suc q)
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
418
87
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
419
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
420 pswap-dist : {n : ℕ} → {x y : Permutation n n } → pprep (pprep (x ∘ₚ y)) =p= (pswap x ∘ₚ pswap y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
421 pswap-dist {n} {x} {y} = record { peq = pswap-dist1 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
422 pswap-dist1 : (q : Fin (suc (suc n))) → ((pprep (pprep (x ∘ₚ y))) ⟨$⟩ʳ q) ≡ ((pswap x ∘ₚ pswap y) ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
423 pswap-dist1 zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
424 pswap-dist1 (suc zero) = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 86
diff changeset
425 pswap-dist1 (suc (suc q)) = cong ( λ k → suc (suc k) ) refl
86
c5329963c583 (x : Permutation 1 1 ) → x =p= pid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 85
diff changeset
426
121
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
427 infixr 100 _::_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
428
49
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
429 data FL : (n : ℕ )→ Set where
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
430 f0 : FL 0
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
431 _::_ : { n : ℕ } → Fin (suc n ) → FL n → FL (suc n)
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
432
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
433 data _f<_ : {n : ℕ } (x : FL n ) (y : FL n) → Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
434 f<n : {m : ℕ } {xn yn : Fin (suc m) } {xt yt : FL m} → xn Data.Fin.< yn → (xn :: xt) f< ( yn :: yt )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
435 f<t : {m : ℕ } {xn : Fin (suc m) } {xt yt : FL m} → xt f< yt → (xn :: xt) f< ( xn :: yt )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
436
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 130
diff changeset
437 _f≤_ : {n : ℕ } (x : FL n ) (y : FL n) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 130
diff changeset
438 _f≤_ x y = (x ≡ y ) ∨ (x f< y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 130
diff changeset
439
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
440 FLeq : {n : ℕ } {xn yn : Fin (suc n)} {x : FL n } {y : FL n} → xn :: x ≡ yn :: y → ( xn ≡ yn ) ∧ (x ≡ y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
441 FLeq refl = record { proj1 = refl ; proj2 = refl }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
442
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
443 f<> : {n : ℕ } {x : FL n } {y : FL n} → x f< y → y f< x → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
444 f<> (f<n x) (f<n x₁) = nat-<> x x₁
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
445 f<> (f<n x) (f<t lt2) = nat-≡< refl x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
446 f<> (f<t lt) (f<n x) = nat-≡< refl x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
447 f<> (f<t lt) (f<t lt2) = f<> lt lt2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
448
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
449 f-≡< : {n : ℕ } {x : FL n } {y : FL n} → x ≡ y → y f< x → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
450 f-≡< refl (f<n x) = nat-≡< refl x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
451 f-≡< refl (f<t lt) = f-≡< refl lt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
452
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
453 FLcmp : {n : ℕ } → Trichotomous {Level.zero} {FL n} _≡_ _f<_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
454 FLcmp f0 f0 = tri≈ (λ ()) refl (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
455 FLcmp (xn :: xt) (yn :: yt) with <-fcmp xn yn
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
456 ... | tri< a ¬b ¬c = tri< (f<n a) (λ eq → nat-≡< (cong toℕ (proj1 (FLeq eq)) ) a) (λ lt → f<> lt (f<n a) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
457 ... | tri> ¬a ¬b c = tri> (λ lt → f<> lt (f<n c) ) (λ eq → nat-≡< (cong toℕ (sym (proj1 (FLeq eq)) )) c) (f<n c)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
458 ... | tri≈ ¬a refl ¬c with FLcmp xt yt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
459 ... | tri< a ¬b ¬c₁ = tri< (f<t a) (λ eq → ¬b (proj2 (FLeq eq) )) (λ lt → f<> lt (f<t a) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
460 ... | tri≈ ¬a₁ refl ¬c₁ = tri≈ (λ lt → f-≡< refl lt ) refl (λ lt → f-≡< refl lt )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
461 ... | tri> ¬a₁ ¬b c = tri> (λ lt → f<> lt (f<t c) ) (λ eq → ¬b (proj2 (FLeq eq) )) (f<t c)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
462
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
463 infixr 250 _f<?_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
464
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
465 _f<?_ : {n : ℕ} → (x y : FL n ) → Dec (x f< y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
466 x f<? y with FLcmp x y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
467 ... | tri< a ¬b ¬c = yes a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
468 ... | tri≈ ¬a refl ¬c = no ( ¬a )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
469 ... | tri> ¬a ¬b c = no ( ¬a )
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
470
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
471 shlem→ : {n : ℕ} → (perm : Permutation (suc n) (suc n) ) → (p0=0 : perm ⟨$⟩ˡ (# 0) ≡ # 0 ) → (x : Fin (suc n) ) → perm ⟨$⟩ˡ x ≡ zero → x ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
472 shlem→ perm p0=0 x px=0 = begin
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
473 x ≡⟨ sym ( inverseʳ perm ) ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
474 perm ⟨$⟩ʳ ( perm ⟨$⟩ˡ x) ≡⟨ cong (λ k → perm ⟨$⟩ʳ k ) px=0 ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
475 perm ⟨$⟩ʳ zero ≡⟨ cong (λ k → perm ⟨$⟩ʳ k ) (sym p0=0) ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
476 perm ⟨$⟩ʳ ( perm ⟨$⟩ˡ zero) ≡⟨ inverseʳ perm ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
477 zero
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
478
54
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
479
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
480 shlem← : {n : ℕ} → (perm : Permutation (suc n) (suc n) ) → (p0=0 : perm ⟨$⟩ˡ (# 0) ≡ # 0 ) → (x : Fin (suc n)) → perm ⟨$⟩ʳ x ≡ zero → x ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
481 shlem← perm p0=0 x px=0 = begin
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
482 x ≡⟨ sym (inverseˡ perm ) ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
483 perm ⟨$⟩ˡ ( perm ⟨$⟩ʳ x ) ≡⟨ cong (λ k → perm ⟨$⟩ˡ k ) px=0 ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
484 perm ⟨$⟩ˡ zero ≡⟨ p0=0 ⟩
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
485 zero
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
486
54
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
487
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
488 sh2 : {n : ℕ} → (perm : Permutation (suc n) (suc n) ) → (p0=0 : perm ⟨$⟩ˡ (# 0) ≡ # 0 ) → {x : Fin n} → ¬ perm ⟨$⟩ˡ (suc x) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
489 sh2 perm p0=0 {x} eq with shlem→ perm p0=0 (suc x) eq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
490 sh2 perm p0=0 {x} eq | ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
491
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
492 sh1 : {n : ℕ} → (perm : Permutation (suc n) (suc n) ) → (p0=0 : perm ⟨$⟩ˡ (# 0) ≡ # 0 ) → {x : Fin n} → ¬ perm ⟨$⟩ʳ (suc x) ≡ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
493 sh1 perm p0=0 {x} eq with shlem← perm p0=0 (suc x) eq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
494 sh1 perm p0=0 {x} eq | ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
495
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
496
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
497 -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] → 0 ∷ 1 ∷ 2 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
498 shrink : {n : ℕ} → (perm : Permutation (suc n) (suc n) ) → perm ⟨$⟩ˡ (# 0) ≡ # 0 → Permutation n n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
499 shrink {n} perm p0=0 = permutation p→ p← record { left-inverse-of = piso→ ; right-inverse-of = piso← } where
57
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
500
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
501 p→ : Fin n → Fin n
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
502 p→ x with perm ⟨$⟩ʳ (suc x) | inspect (_⟨$⟩ʳ_ perm ) (suc x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
503 p→ x | zero | record { eq = e } = ⊥-elim ( sh1 perm p0=0 {x} e )
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
504 p→ x | suc t | _ = t
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
505
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
506 p← : Fin n → Fin n
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
507 p← x with perm ⟨$⟩ˡ (suc x) | inspect (_⟨$⟩ˡ_ perm ) (suc x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
508 p← x | zero | record { eq = e } = ⊥-elim ( sh2 perm p0=0 {x} e )
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
509 p← x | suc t | _ = t
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
510
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
511 piso← : (x : Fin n ) → p→ ( p← x ) ≡ x
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
512 piso← x with perm ⟨$⟩ˡ (suc x) | inspect (_⟨$⟩ˡ_ perm ) (suc x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
513 piso← x | zero | record { eq = e } = ⊥-elim ( sh2 perm p0=0 {x} e )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
514 piso← x | suc t | _ with perm ⟨$⟩ʳ (suc t) | inspect (_⟨$⟩ʳ_ perm ) (suc t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
515 piso← x | suc t | _ | zero | record { eq = e } = ⊥-elim ( sh1 perm p0=0 e )
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
516 piso← x | suc t | record { eq = e0 } | suc t1 | record { eq = e1 } = begin
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
517 t1
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
518 ≡⟨ plem0 plem1 ⟩
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
519 x
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
520 ∎ where
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
521 open ≡-Reasoning
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
522 plem0 : suc t1 ≡ suc x → t1 ≡ x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
523 plem0 refl = refl
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
524 plem1 : suc t1 ≡ suc x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
525 plem1 = begin
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
526 suc t1
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
527 ≡⟨ sym e1 ⟩
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
528 Inverse.to perm Π.⟨$⟩ suc t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
529 ≡⟨ cong (λ k → Inverse.to perm Π.⟨$⟩ k ) (sym e0) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
530 Inverse.to perm Π.⟨$⟩ ( Inverse.from perm Π.⟨$⟩ suc x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
531 ≡⟨ inverseʳ perm ⟩
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
532 suc x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
533
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
534
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
535 piso→ : (x : Fin n ) → p← ( p→ x ) ≡ x
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
536 piso→ x with perm ⟨$⟩ʳ (suc x) | inspect (_⟨$⟩ʳ_ perm ) (suc x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
537 piso→ x | zero | record { eq = e } = ⊥-elim ( sh1 perm p0=0 {x} e )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
538 piso→ x | suc t | _ with perm ⟨$⟩ˡ (suc t) | inspect (_⟨$⟩ˡ_ perm ) (suc t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
539 piso→ x | suc t | _ | zero | record { eq = e } = ⊥-elim ( sh2 perm p0=0 e )
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
540 piso→ x | suc t | record { eq = e0 } | suc t1 | record { eq = e1 } = begin
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
541 t1
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
542 ≡⟨ plem2 plem3 ⟩
53
2283d6f8a2fb connected
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
543 x
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
544 ∎ where
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
545 plem2 : suc t1 ≡ suc x → t1 ≡ x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
546 plem2 refl = refl
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
547 plem3 : suc t1 ≡ suc x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
548 plem3 = begin
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
549 suc t1
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
550 ≡⟨ sym e1 ⟩
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
551 Inverse.from perm Π.⟨$⟩ suc t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
552 ≡⟨ cong (λ k → Inverse.from perm Π.⟨$⟩ k ) (sym e0 ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
553 Inverse.from perm Π.⟨$⟩ ( Inverse.to perm Π.⟨$⟩ suc x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
554 ≡⟨ inverseˡ perm ⟩
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
555 suc x
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
556
57
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
557
88
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
558 shrink-iso : { n : ℕ } → {perm : Permutation n n} → shrink (pprep perm) refl =p= perm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
559 shrink-iso {n} {perm} = record { peq = λ q → refl }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 87
diff changeset
560
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
561 shrink-iso2 : { n : ℕ } → {perm : Permutation (suc n) (suc n)}
108
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
562 → (p=0 : perm ⟨$⟩ˡ (# 0) ≡ # 0) → pprep (shrink perm p=0) =p= perm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
563 shrink-iso2 {n} {perm} p=0 = record { peq = s001 } where
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
564 s001 : (q : Fin (suc n)) → (pprep (shrink perm p=0) ⟨$⟩ʳ q) ≡ perm ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
565 s001 zero = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
566 zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
567 ≡⟨ sym ( inverseʳ perm ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
568 perm ⟨$⟩ʳ ( perm ⟨$⟩ˡ zero )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
569 ≡⟨ cong (λ k → perm ⟨$⟩ʳ k ) p=0 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
570 perm ⟨$⟩ʳ zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
571
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
572 s001 (suc q) with perm ⟨$⟩ʳ (suc q) | inspect (_⟨$⟩ʳ_ perm ) (suc q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
573 ... | zero | record {eq = e} = ⊥-elim (sh1 perm p=0 {q} e)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
574 ... | suc t | e = refl
108
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 107
diff changeset
575
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
576
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
577 shrink-cong : { n : ℕ } → {x y : Permutation (suc n) (suc n)}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
578 → x =p= y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
579 → (x=0 : x ⟨$⟩ˡ (# 0) ≡ # 0 ) → (y=0 : y ⟨$⟩ˡ (# 0) ≡ # 0 ) → shrink x x=0 =p= shrink y y=0
99
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
580 shrink-cong {n} {x} {y} x=y x=0 y=0 = record { peq = p002 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
581 p002 : (q : Fin n) → (shrink x x=0 ⟨$⟩ʳ q) ≡ (shrink y y=0 ⟨$⟩ʳ q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
582 p002 q with x ⟨$⟩ʳ (suc q) | inspect (_⟨$⟩ʳ_ x ) (suc q) | y ⟨$⟩ʳ (suc q) | inspect (_⟨$⟩ʳ_ y ) (suc q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
583 p002 q | zero | record { eq = ex } | zero | ey = ⊥-elim ( sh1 x x=0 ex )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
584 p002 q | zero | record { eq = ex } | suc py | ey = ⊥-elim ( sh1 x x=0 ex )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
585 p002 q | suc px | ex | zero | record { eq = ey } = ⊥-elim ( sh1 y y=0 ey )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
586 p002 q | suc px | record { eq = ex } | suc py | record { eq = ey } = p003 ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
587 suc px
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
588 ≡⟨ sym ex ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
589 x ⟨$⟩ʳ (suc q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
590 ≡⟨ peq x=y (suc q) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
591 y ⟨$⟩ʳ (suc q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
592 ≡⟨ ey ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
593 suc py
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
594 ∎ ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
595 p003 : suc px ≡ suc py → px ≡ py
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
596 p003 refl = refl
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
597
57
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
598 FL→perm : {n : ℕ } → FL n → Permutation n n
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
599 FL→perm f0 = pid
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
600 FL→perm (x :: fl) = pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x )
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
601
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
602 t40 = (# 2) :: ( (# 1) :: (( # 0 ) :: f0 ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
603 t4 = FL→perm ((# 2) :: t40 )
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
604
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
605 -- t1 = plist (shrink (pid {3} ∘ₚ (pins (n≤ 1))) refl)
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
606 t2 = plist ((pid {5} ) ∘ₚ transpose (# 2) (# 4)) ∷ plist (pid {5} ∘ₚ reverse ) ∷ []
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
607 t3 = plist (FL→perm t40) -- ∷ plist (pprep (FL→perm t40))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
608 -- ∷ plist ( pprep (FL→perm t40) ∘ₚ pins ( n≤ 0 {3} ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
609 -- ∷ plist ( pprep (FL→perm t40 )∘ₚ pins ( n≤ 1 {2} ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
610 -- ∷ plist ( pprep (FL→perm t40 )∘ₚ pins ( n≤ 2 {1} ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
611 -- ∷ plist ( pprep (FL→perm t40 )∘ₚ pins ( n≤ 3 {0} ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
612 ∷ plist ( FL→perm ((# 0) :: t40)) -- (0 ∷ 1 ∷ 2 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
613 ∷ plist ( FL→perm ((# 1) :: t40)) -- (0 ∷ 2 ∷ 1 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
614 ∷ plist ( FL→perm ((# 2) :: t40)) -- (1 ∷ 0 ∷ 2 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
615 ∷ plist ( FL→perm ((# 3) :: t40)) -- (2 ∷ 0 ∷ 1 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
616 -- ∷ plist ( FL→perm ((# 3) :: ((# 2) :: ( (# 0) :: (( # 0 ) :: f0 )) ))) -- (1 ∷ 2 ∷ 0 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
617 -- ∷ plist ( FL→perm ((# 3) :: ((# 2) :: ( (# 1) :: (( # 0 ) :: f0 )) ))) -- (2 ∷ 1 ∷ 0 ∷ []) ∷
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
618 -- ∷ plist ( (flip (FL→perm ((# 3) :: ((# 1) :: ( (# 0) :: (( # 0 ) :: f0 )) )))))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
619 -- ∷ plist ( (flip (FL→perm ((# 3) :: ((# 1) :: ( (# 0) :: (( # 0 ) :: f0 )) ))) ∘ₚ (FL→perm ((# 3) :: (((# 1) :: ( (# 0) :: (( # 0 ) :: f0 )) )))) ))
57
518d364a58a3 shrink worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 56
diff changeset
620 ∷ []
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
621
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
622
49
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
623 perm→FL : {n : ℕ } → Permutation n n → FL n
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
624 perm→FL {zero} perm = f0
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
625 perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
626 -- perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (remove (# 0) perm)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
627
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
628 _p<_ : {n : ℕ } ( x y : Permutation n n ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
629 x p< y = perm→FL x f< perm→FL y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 129
diff changeset
630
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
631 pcong-pF : {n : ℕ } → {x y : Permutation n n} → x =p= y → perm→FL x ≡ perm→FL y
99
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
632 pcong-pF {zero} eq = refl
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
633 pcong-pF {suc n} {x} {y} eq = cong₂ (λ j k → j :: k ) ( peq eq (# 0)) (pcong-pF (shrink-cong (presp eq p001 ) (p=0 x) (p=0 y))) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
634 p002 : x ⟨$⟩ʳ (# 0) ≡ y ⟨$⟩ʳ (# 0)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
635 p002 = peq eq (# 0)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
636 p001 : flip (pins (toℕ≤pred[n] (x ⟨$⟩ʳ (# 0)))) =p= flip (pins (toℕ≤pred[n] (y ⟨$⟩ʳ (# 0))))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
637 p001 = subst ( λ k → flip (pins (toℕ≤pred[n] (x ⟨$⟩ʳ (# 0)))) =p= flip (pins (toℕ≤pred[n] k ))) p002 prefl
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
638
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
639 -- t5 = plist t4 ∷ plist ( t4 ∘ₚ flip (pins ( n≤ 3 ) ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
640 t5 = plist (t4) ∷ plist (flip t4)
74
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
641 ∷ ( toℕ (t4 ⟨$⟩ˡ fromℕ< a<sa) ∷ [] )
61
c16749815259 another shrink
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
642 ∷ ( toℕ (t4 ⟨$⟩ʳ (# 0)) ∷ [] )
60
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
643 -- ∷ plist ( t4 ∘ₚ flip (pins ( n≤ 1 ) ))
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
644 ∷ plist (remove (# 0) t4 )
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
645 ∷ plist ( FL→perm t40 )
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
646 ∷ []
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
647
48926e810f5f perm→FL done. pprep fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
648 t6 = perm→FL t4
49
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
649
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
650 FL→iso : {n : ℕ } → (fl : FL n ) → perm→FL ( FL→perm fl ) ≡ fl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
651 FL→iso f0 = refl
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
652 FL→iso {suc n} (x :: fl) = cong₂ ( λ j k → j :: k ) f001 f002 where
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
653 perm = pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
654 f001 : perm ⟨$⟩ʳ (# 0) ≡ x
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
655 f001 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
656 (pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x )) ⟨$⟩ʳ (# 0)
101
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
657 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
658 pins ( toℕ≤pred[n] x ) ⟨$⟩ʳ (# 0)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
659 ≡⟨ px=x x ⟩
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
660 x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
661
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
662 x=0 : (perm ∘ₚ flip (pins (toℕ≤pred[n] x))) ⟨$⟩ˡ (# 0) ≡ # 0
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
663 x=0 = subst ( λ k → (perm ∘ₚ flip (pins (toℕ≤pred[n] k))) ⟨$⟩ˡ (# 0) ≡ # 0 ) f001 (p=0 perm)
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
664 x=0' : (pprep (FL→perm fl) ∘ₚ pid) ⟨$⟩ˡ (# 0) ≡ # 0
100
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
665 x=0' = refl
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
666 f003 : (q : Fin (suc n)) →
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
667 ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ʳ q) ≡
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
668 ((perm ∘ₚ flip (pins (toℕ≤pred[n] x))) ⟨$⟩ʳ q)
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
669 f003 q = cong (λ k → (perm ∘ₚ flip (pins (toℕ≤pred[n] k))) ⟨$⟩ʳ q ) f001
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
670 f002 : perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) ) ≡ fl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
671 f002 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
672 perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) )
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
673 ≡⟨ pcong-pF (shrink-cong {n} {perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))} {perm ∘ₚ flip (pins (toℕ≤pred[n] x))} record {peq = f003 } (p=0 perm) x=0) ⟩
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
674 perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] x))) x=0 )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
675 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
676 perm→FL (shrink ((pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x )) ∘ₚ flip (pins (toℕ≤pred[n] x))) x=0 )
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
677 ≡⟨ pcong-pF (shrink-cong (passoc (pprep (FL→perm fl)) (pins ( toℕ≤pred[n] x )) (flip (pins (toℕ≤pred[n] x))) ) x=0 x=0) ⟩
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
678 perm→FL (shrink (pprep (FL→perm fl) ∘ₚ (pins ( toℕ≤pred[n] x ) ∘ₚ flip (pins (toℕ≤pred[n] x)))) x=0 )
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
679 ≡⟨ pcong-pF (shrink-cong {n} {pprep (FL→perm fl) ∘ₚ (pins ( toℕ≤pred[n] x ) ∘ₚ flip (pins (toℕ≤pred[n] x)))} {pprep (FL→perm fl) ∘ₚ pid}
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
680 ( presp {suc n} {pprep (FL→perm fl) } {_} {(pins ( toℕ≤pred[n] x ) ∘ₚ flip (pins (toℕ≤pred[n] x)))} {pid} prefl
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
681 record { peq = λ q → inverseˡ (pins ( toℕ≤pred[n] x )) } ) x=0 x=0') ⟩
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
682 perm→FL (shrink (pprep (FL→perm fl) ∘ₚ pid) x=0' )
103
7595ee384b3d FL→iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
683 ≡⟨ pcong-pF (shrink-cong {n} {pprep (FL→perm fl) ∘ₚ pid} {pprep (FL→perm fl)} record {peq = λ q → refl } x=0' x=0') ⟩ -- prefl won't work
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
684 perm→FL (shrink (pprep (FL→perm fl)) x=0' )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
685 ≡⟨ pcong-pF shrink-iso ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
686 perm→FL ( FL→perm fl )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
687 ≡⟨ FL→iso fl ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
688 fl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
689
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 97
diff changeset
690
104
2d0738a38ac9 ... bad approach
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
691 pcong-Fp : {n : ℕ } → {x y : FL n} → x ≡ y → FL→perm x =p= FL→perm y
2d0738a38ac9 ... bad approach
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
692 pcong-Fp {n} {x} {x} refl = prefl
49
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
693
104
2d0738a38ac9 ... bad approach
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
694 FL←iso : {n : ℕ } → (perm : Permutation n n ) → FL→perm ( perm→FL perm ) =p= perm
2d0738a38ac9 ... bad approach
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
695 FL←iso {0} perm = record { peq = λ () }
106
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
696 FL←iso {suc n} perm = record { peq = λ q → ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
697 FL→perm ( perm→FL perm ) ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
698 ≡⟨⟩
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
699 (pprep (FL→perm (perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) ))) ∘ₚ pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) ) ) ⟨$⟩ʳ q
110
cb3281e83229 FL iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
700 ≡⟨ peq (presp {suc n} {_} {_} {pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)))} (pprep-cong {n} {FL→perm (perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) ))} (FL←iso _ ) ) prefl ) q ⟩
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
701 (pprep (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm)) ∘ₚ pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) )) ⟨$⟩ʳ q
110
cb3281e83229 FL iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
702 ≡⟨ peq (presp {suc n} {pprep (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm))} {perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))} {pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) )} (shrink-iso2 (p=0 perm)) prefl) q ⟩
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
703 ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ∘ₚ pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) )) ⟨$⟩ʳ q
110
cb3281e83229 FL iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
704 ≡⟨ peq (presp {suc n} {perm} {_} {flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)))) ∘ₚ pins ( toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)))} {pid} prefl record { peq = λ q → inverseʳ (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)))) }) q ⟩
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
705 ( perm ∘ₚ pid ) ⟨$⟩ʳ q
110
cb3281e83229 FL iso done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
706 ≡⟨⟩
104
2d0738a38ac9 ... bad approach
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
707 perm ⟨$⟩ʳ q
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
708 ∎ ) }
49
8b3b95362ca9 remove (fromℕ≤ a<sa) perm is no good
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
709
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
710 FL-inject : {n : ℕ } → {g h : Permutation n n } → perm→FL g ≡ perm→FL h → g =p= h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
711 FL-inject {n} {g} {h} g=h = record { peq = λ q → ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
712 g ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
713 ≡⟨ peq (psym (FL←iso g )) q ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
714 ( FL→perm (perm→FL g) ) ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
715 ≡⟨ cong ( λ k → FL→perm k ⟨$⟩ʳ q ) g=h ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
716 ( FL→perm (perm→FL h) ) ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
717 ≡⟨ peq (FL←iso h) q ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
718 h ⟨$⟩ʳ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
719 ∎ ) }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
720
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
721
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
722 lem2 : {i n : ℕ } → i ≤ n → i ≤ suc n
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
723 lem2 i≤n = ≤-trans i≤n ( a≤sa )
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
724
67
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
725 ∀-FL : (n : ℕ ) → List (FL (suc n))
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
726 ∀-FL x = fls6 x where
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
727 fls4 : ( i n : ℕ ) → (i<n : i ≤ n ) → FL n → List (FL (suc n)) → List (FL (suc n))
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
728 fls4 zero n i≤n perm x = (zero :: perm ) ∷ x
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
729 fls4 (suc i) n i≤n perm x = fls4 i n (≤-trans a≤sa i≤n ) perm ((fromℕ< (s≤s i≤n) :: perm ) ∷ x)
67
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
730 fls5 : ( n : ℕ ) → List (FL n) → List (FL (suc n)) → List (FL (suc n))
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
731 fls5 n [] x = x
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
732 fls5 n (h ∷ x) y = fls5 n x (fls4 n n lem0 h y)
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
733 fls6 : ( n : ℕ ) → List (FL (suc n))
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
734 fls6 zero = (zero :: f0) ∷ []
3825082ebdbd ∀-FL : (n : ℕ ) → List (FL (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
735 fls6 (suc n) = fls5 (suc n) (fls6 n) []
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
736
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
737 tf1 = ∀-FL 4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
738 tf2 = Data.List.map (λ k → ⟪ plist (FL→perm k ) , k ⟫ ) tf1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 96
diff changeset
739
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
740 all-perm : (n : ℕ ) → List (Permutation (suc n) (suc n) )
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
741 all-perm n = pls6 n where
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
742 lem1 : {i n : ℕ } → i ≤ n → i < suc n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
743 lem1 z≤n = s≤s z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
744 lem1 (s≤s lt) = s≤s (lem1 lt)
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
745 pls4 : ( i n : ℕ ) → (i<n : i ≤ n ) → Permutation n n → List (Permutation (suc n) (suc n)) → List (Permutation (suc n) (suc n))
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
746 pls4 zero n i≤n perm x = (pprep perm ∘ₚ pins i≤n ) ∷ x
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 90
diff changeset
747 pls4 (suc i) n i≤n perm x = pls4 i n (≤-trans a≤sa i≤n ) perm (pprep perm ∘ₚ pins {n} {suc i} i≤n ∷ x)
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
748 pls5 : ( n : ℕ ) → List (Permutation n n) → List (Permutation (suc n) (suc n)) → List (Permutation (suc n) (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
749 pls5 n [] x = x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
750 pls5 n (h ∷ x) y = pls5 n x (pls4 n n lem0 h y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
751 pls6 : ( n : ℕ ) → List (Permutation (suc n) (suc n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
752 pls6 zero = pid ∷ []
48
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
753 pls6 (suc n) = pls5 (suc n) (rev (pls6 n) ) [] -- rev to put id first
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
754
ac2f21a2d467 cleanup
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
755 pls : (n : ℕ ) → List (List ℕ )
75
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 74
diff changeset
756 pls n = Data.List.map plist (all-perm n)