comparison Putil.agda @ 89:dcb4450680ab

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 28 Aug 2020 13:33:35 +0900
parents 405c1f727ffe
children bb8c5b366219
comparison
equal deleted inserted replaced
88:405c1f727ffe 89:dcb4450680ab
103 lem0 {suc n} = s≤s lem0 103 lem0 {suc n} = s≤s lem0
104 104
105 lem00 : {n m : ℕ } → n ≡ m → n ≤ m 105 lem00 : {n m : ℕ } → n ≡ m → n ≤ m
106 lem00 refl = lem0 106 lem00 refl = lem0
107 107
108 plist1 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ
109 plist1 {n} perm zero _ = toℕ ( perm ⟨$⟩ˡ (fromℕ< {zero} (s≤s z≤n))) ∷ []
110 plist1 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ˡ (fromℕ< (s≤s lt))) ∷ plist1 perm i (<-trans lt a<sa)
111
112 plist : {n : ℕ} → Permutation n n → List ℕ
113 plist {0} perm = []
114 plist {suc n} perm = rev (plist1 perm n a<sa)
115
108 -- pconcat : {n m : ℕ } → Permutation m m → Permutation n n → Permutation (m + n) (m + n) 116 -- pconcat : {n m : ℕ } → Permutation m m → Permutation n n → Permutation (m + n) (m + n)
109 -- pconcat {n} {m} p q = pfill {n + m} {m} ? p ∘ₚ ? 117 -- pconcat {n} {m} p q = pfill {n + m} {m} ? p ∘ₚ ?
110 118
111 -- inductivley enmumerate permutations 119 -- inductivley enmumerate permutations
112 -- from n-1 length create n length inserting new element at position m 120 -- from n-1 length create n length inserting new element at position m
113 121
114 -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] 122 -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] -- 0 ∷ 1 ∷ 2 ∷ 3 ∷ []
115 -- 1 ∷ 0 ∷ 2 ∷ 3 ∷ [] plist ( pins {3} (n≤ 1) ) 123 -- 1 ∷ 0 ∷ 2 ∷ 3 ∷ [] plist ( pins {3} (n≤ 1) ) 1 ∷ 0 ∷ 2 ∷ 3 ∷ []
116 -- 1 ∷ 2 ∷ 0 ∷ 3 ∷ [] 124 -- 1 ∷ 2 ∷ 0 ∷ 3 ∷ [] plist ( pins {3} (n≤ 2) ) 2 ∷ 0 ∷ 1 ∷ 3 ∷ []
117 -- 1 ∷ 2 ∷ 3 ∷ 0 ∷ [] 125 -- 1 ∷ 2 ∷ 3 ∷ 0 ∷ [] plist ( pins {3} (n≤ 3) ) 3 ∷ 0 ∷ 1 ∷ 2 ∷ []
118
119 pins : {n m : ℕ} → m ≤ n → Permutation (suc n) (suc n) 126 pins : {n m : ℕ} → m ≤ n → Permutation (suc n) (suc n)
120 pins {_} {zero} _ = pid 127 pins {_} {zero} _ = pid
121 pins {suc _} {suc zero} _ = pswap pid 128 pins {suc _} {suc zero} _ = pswap pid
122 pins {suc (suc n)} {suc m} (s≤s m<n) = pins1 (suc (suc n)) lem0 where 129 pins {suc (suc n)} {suc m} (s≤s m<n) = pins1 (suc m) (suc (suc n)) lem0 where
123 pins1 : (j : ℕ ) → j ≤ suc (suc n) → Permutation (suc (suc (suc n ))) (suc (suc (suc n))) 130 pins1 : (i j : ℕ ) → j ≤ suc (suc n) → Permutation (suc (suc (suc n ))) (suc (suc (suc n)))
124 pins1 zero _ = pid 131 pins1 _ zero _ = pid
125 pins1 (suc j) (s≤s si≤n) = psawpim {suc (suc (suc n))} {j} (s≤s (s≤s si≤n)) ∘ₚ pins1 j (≤-trans si≤n refl-≤s ) 132 pins1 zero _ _ = pid
126 133 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 refl-≤s )
127 plist1 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ 134
128 plist1 {n} perm zero _ = toℕ ( perm ⟨$⟩ˡ (fromℕ< {zero} (s≤s z≤n))) ∷ [] 135 pins' : {n m : ℕ} → m ≤ n → Permutation (suc n) (suc n)
129 plist1 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ˡ (fromℕ< (s≤s lt))) ∷ plist1 perm i (<-trans lt a<sa) 136 pins' {_} {zero} _ = pid
130 137 pins' {suc n} {suc m} (s≤s m≤n) = permutation p← p→ record { left-inverse-of = piso← ; right-inverse-of = piso→ } where
131 plist : {n : ℕ} → Permutation n n → List ℕ 138
132 plist {0} perm = [] 139 next : Fin (suc (suc n)) → Fin (suc (suc n))
133 plist {suc n} perm = rev (plist1 perm n a<sa) 140 next zero = suc zero
141 next (suc x) = fromℕ< (≤-trans (fin<n {_} {x} ) refl-≤s )
142
143 p→ : Fin (suc (suc n)) → Fin (suc (suc n))
144 p→ x with <-cmp (toℕ x) (suc m)
145 ... | tri< a ¬b ¬c = fromℕ< (≤-trans (s≤s a) (≤-trans (s≤s (s≤s m≤n) ) lem0 ))
146 ... | tri≈ ¬a b ¬c = zero
147 ... | tri> ¬a ¬b c = x
148
149 p← : Fin (suc (suc n)) → Fin (suc (suc n))
150 p← zero = fromℕ< (s≤s (s≤s m≤n))
151 p← (suc x) with <-cmp (toℕ x) (suc m)
152 ... | tri< a ¬b ¬c = fromℕ< (≤-trans (fin<n {_} {x}) refl-≤s )
153 ... | tri≈ ¬a b ¬c = suc x
154 ... | tri> ¬a ¬b c = suc x
155
156 piso← : (x : Fin (suc (suc n)) ) → p→ ( p← x ) ≡ x
157 piso← = {!!}
158
159 piso→ : (x : Fin (suc (suc n)) ) → p← ( p→ x ) ≡ x
160 piso→ = {!!}
161
162 t7 = plist (pins' {3} (n≤ 3)) ∷ plist (flip ( pins' {3} (n≤ 3) )) ∷ plist ( pins' {3} (n≤ 3) ∘ₚ flip ( pins' {3} (n≤ 3))) ∷ []
163 t8 = {!!}
164
134 165
135 plist2 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ 166 plist2 : {n : ℕ} → Permutation (suc n) (suc n) → (i : ℕ ) → i < suc n → List ℕ
136 plist2 {n} perm zero _ = toℕ ( perm ⟨$⟩ʳ (fromℕ< {zero} (s≤s z≤n))) ∷ [] 167 plist2 {n} perm zero _ = toℕ ( perm ⟨$⟩ʳ (fromℕ< {zero} (s≤s z≤n))) ∷ []
137 plist2 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ʳ (fromℕ< (s≤s lt))) ∷ plist2 perm i (<-trans lt a<sa) 168 plist2 {n} perm (suc i) (s≤s lt) = toℕ ( perm ⟨$⟩ʳ (fromℕ< (s≤s lt))) ∷ plist2 perm i (<-trans lt a<sa)
138 169
343 374
344 375
345 shrink-iso : { n : ℕ } → {perm : Permutation n n} → shrink (pprep perm) refl =p= perm 376 shrink-iso : { n : ℕ } → {perm : Permutation n n} → shrink (pprep perm) refl =p= perm
346 shrink-iso {n} {perm} = record { peq = λ q → refl } 377 shrink-iso {n} {perm} = record { peq = λ q → refl }
347 378
348 p01 : (perm : Permutation 1 1) → perm =p= pid
349 p01 perm = record { peq = p01e } where
350 p01e : (q : Fin 1) → (perm ⟨$⟩ʳ q) ≡ (pid ⟨$⟩ʳ q)
351 p01e zero with perm ⟨$⟩ʳ zero
352 ... | zero = refl
353
354 p=0 : {n : ℕ } → (perm : Permutation (suc n) (suc n) ) → ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0)) ≡ # 0
355 p=0 {zero} perm with p01 perm | p01 ( flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) )))
356 ... | s | t = begin
357 ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0))
358 ≡⟨ peqˡ (presp (p01 perm) (p01 (flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0)) ))))) (# 0) ⟩
359 (pid ∘ₚ pid ) ⟨$⟩ʳ (# 0)
360 ≡⟨⟩
361 # 0
362 ∎ where open ≡-Reasoning
363 p=0 {suc (zero)} perm with perm ⟨$⟩ʳ (# 0) | inspect ( _⟨$⟩ʳ_ perm ) (# 0)
364 ... | zero | record { eq = e } = begin
365 (perm ∘ₚ pid) ⟨$⟩ˡ (# 0)
366 ≡⟨⟩
367 perm ⟨$⟩ˡ (# 0)
368 ≡⟨ cong (λ k → perm ⟨$⟩ˡ k ) (sym e ) ⟩
369 perm ⟨$⟩ˡ (perm ⟨$⟩ʳ (# 0))
370 ≡⟨ inverseˡ perm ⟩
371 # 0
372 ∎ where open ≡-Reasoning
373 ... | suc zero | record { eq = e } = begin
374 (perm ∘ₚ pswap pid) ⟨$⟩ˡ (# 0)
375 ≡⟨⟩
376 perm ⟨$⟩ˡ (# 1)
377 ≡⟨ cong (λ k → perm ⟨$⟩ˡ k ) (sym e ) ⟩
378 perm ⟨$⟩ˡ (perm ⟨$⟩ʳ (# 0))
379 ≡⟨ inverseˡ perm ⟩
380 # 0
381 ∎ where open ≡-Reasoning
382 p=0 {suc (suc n) } perm = p=01 (suc (suc n)) lem0 where
383 p=01 : (j : ℕ ) → j ≤ suc (suc n) → ((perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) ⟨$⟩ˡ (# 0)) ≡ # 0
384 p=01 zero _ = {!!}
385 p=01 (suc j) (s≤s si≤n) = {!!}
386
387 FL→perm : {n : ℕ } → FL n → Permutation n n 379 FL→perm : {n : ℕ } → FL n → Permutation n n
388 FL→perm f0 = pid 380 FL→perm f0 = pid
389 FL→perm (x :: fl) = pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x ) 381 FL→perm (x :: fl) = pprep (FL→perm fl) ∘ₚ pins ( toℕ≤pred[n] x )
390 382
391 t40 = (# 2) :: ( (# 1) :: (( # 0 ) :: f0 )) 383 t40 = (# 2) :: ( (# 1) :: (( # 0 ) :: f0 ))
409 ∷ [] 401 ∷ []
410 402
411 403
412 perm→FL : {n : ℕ } → Permutation n n → FL n 404 perm→FL : {n : ℕ } → Permutation n n → FL n
413 perm→FL {zero} perm = f0 405 perm→FL {zero} perm = f0
414 -- perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (remove (# 0) perm) 406 perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (remove (# 0) perm)
415 perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) ) 407 -- perm→FL {suc n} perm = (perm ⟨$⟩ʳ (# 0)) :: perm→FL (shrink (perm ∘ₚ flip (pins (toℕ≤pred[n] (perm ⟨$⟩ʳ (# 0))))) (p=0 perm) )
416 408
417 -- t5 = plist t4 ∷ plist ( t4 ∘ₚ flip (pins ( n≤ 3 ) )) 409 -- t5 = plist t4 ∷ plist ( t4 ∘ₚ flip (pins ( n≤ 3 ) ))
418 t5 = plist (t4) ∷ plist (flip t4) 410 t5 = plist (t4) ∷ plist (flip t4)
419 ∷ ( toℕ (t4 ⟨$⟩ˡ fromℕ< a<sa) ∷ [] ) 411 ∷ ( toℕ (t4 ⟨$⟩ˡ fromℕ< a<sa) ∷ [] )
420 ∷ ( toℕ (t4 ⟨$⟩ʳ (# 0)) ∷ [] ) 412 ∷ ( toℕ (t4 ⟨$⟩ʳ (# 0)) ∷ [] )