Mercurial > hg > Members > kono > Proof > automaton
comparison automaton-in-agda/src/finiteSetUtil.agda @ 403:c298981108c1
fix for std-lib 2.0
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Sep 2023 11:32:01 +0900 |
parents | 708570e55a91 |
children | dfaf230f7b9a |
comparison
equal
deleted
inserted
replaced
402:093e386c10a2 | 403:c298981108c1 |
---|---|
1 {-# OPTIONS --allow-unsolved-metas #-} | 1 {-# OPTIONS --cubical-compatible --safe #-} |
2 | 2 |
3 module finiteSetUtil where | 3 module finiteSetUtil where |
4 | 4 |
5 open import Data.Nat hiding ( _≟_ ) | 5 open import Data.Nat hiding ( _≟_ ) |
6 open import Data.Fin renaming ( _<_ to _<<_ ; _>_ to _f>_ ; _≟_ to _f≟_ ) hiding (_≤_ ; pred ) | 6 open import Data.Fin renaming ( _<_ to _<<_ ; _>_ to _f>_ ; _≟_ to _f≟_ ) hiding (_≤_ ; pred ) |
12 open import logic | 12 open import logic |
13 open import nat | 13 open import nat |
14 open import finiteSet | 14 open import finiteSet |
15 open import fin | 15 open import fin |
16 open import Data.Nat.Properties as NP hiding ( _≟_ ) | 16 open import Data.Nat.Properties as NP hiding ( _≟_ ) |
17 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) | |
18 | 17 |
19 record Found ( Q : Set ) (p : Q → Bool ) : Set where | 18 record Found ( Q : Set ) (p : Q → Bool ) : Set where |
20 field | 19 field |
21 found-q : Q | 20 found-q : Q |
22 found-p : p found-q ≡ true | 21 found-p : p found-q ≡ true |
23 | 22 |
24 open Bijection | 23 open Bijection |
25 | 24 |
26 open import Axiom.Extensionality.Propositional | 25 open import Axiom.Extensionality.Propositional |
27 open import Level hiding (suc ; zero) | 26 open import Level hiding (suc ; zero) |
28 postulate f-extensionality : { n : Level} → Axiom.Extensionality.Propositional.Extensionality n n -- (Level.suc n) | |
29 | 27 |
30 module _ {Q : Set } (F : FiniteSet Q) where | 28 module _ {Q : Set } (F : FiniteSet Q) where |
31 open FiniteSet F | 29 open FiniteSet F |
32 equal?-refl : { x : Q } → equal? x x ≡ true | 30 equal?-refl : { x : Q } → equal? x x ≡ true |
33 equal?-refl {x} with F←Q x ≟ F←Q x | 31 equal?-refl {x} with F←Q x ≟ F←Q x |
34 ... | yes refl = refl | 32 ... | yes eq = refl |
35 ... | no ne = ⊥-elim (ne refl) | 33 ... | no ne = ⊥-elim (ne refl) |
36 equal→refl : { x y : Q } → equal? x y ≡ true → x ≡ y | 34 equal→refl : { x y : Q } → equal? x y ≡ true → x ≡ y |
37 equal→refl {q0} {q1} eq with F←Q q0 ≟ F←Q q1 | 35 equal→refl {q0} {q1} eq with F←Q q0 ≟ F←Q q1 |
38 equal→refl {q0} {q1} refl | yes eq = begin | 36 equal→refl {q0} {q1} refl | yes eq = begin |
39 q0 | 37 q0 |
87 false | 85 false |
88 ∎ where open ≡-Reasoning | 86 ∎ where open ≡-Reasoning |
89 found← : { p : Q → Bool } → exists p ≡ true → Found Q p | 87 found← : { p : Q → Bool } → exists p ≡ true → Found Q p |
90 found← {p} exst = found2 finite NP.≤-refl (first-end p ) where | 88 found← {p} exst = found2 finite NP.≤-refl (first-end p ) where |
91 found2 : (m : ℕ ) (m<n : m Data.Nat.≤ finite ) → End m p → Found Q p | 89 found2 : (m : ℕ ) (m<n : m Data.Nat.≤ finite ) → End m p → Found Q p |
92 found2 0 m<n end = ⊥-elim ( ¬-bool (not-found (λ q → end (F←Q q) z≤n ) ) (subst (λ k → exists k ≡ true) (sym lemma) exst ) ) where | 90 found2 0 m<n end = ⊥-elim ( ¬-bool f01 exst ) where |
93 lemma : (λ z → p (Q←F (F←Q z))) ≡ p | 91 f01 : exists p ≡ false |
94 lemma = f-extensionality ( λ q → subst (λ k → p k ≡ p q ) (sym (finiso→ q)) refl ) | 92 f01 = not-found (λ q → subst ( λ k → p k ≡ false ) (finiso→ _) (end (F←Q q) z≤n )) |
95 found2 (suc m) m<n end with bool-≡-? (p (Q←F (fromℕ< m<n))) true | 93 found2 (suc m) m<n end with bool-≡-? (p (Q←F (fromℕ< m<n))) true |
96 found2 (suc m) m<n end | yes eq = record { found-q = Q←F (fromℕ< m<n) ; found-p = eq } | 94 found2 (suc m) m<n end | yes eq = record { found-q = Q←F (fromℕ< m<n) ; found-p = eq } |
97 found2 (suc m) m<n end | no np = | 95 found2 (suc m) m<n end | no np = |
98 found2 m (<to≤ m<n) (next-end p end m<n (¬-bool-t np )) | 96 found2 m (<to≤ m<n) (next-end p end m<n (¬-bool-t np )) |
99 not-found← : { p : Q → Bool } → exists p ≡ false → (q : Q ) → p q ≡ false | 97 not-found← : { p : Q → Bool } → exists p ≡ false → (q : Q ) → p q ≡ false |
287 exp 2 n Data.Nat.+ exp 2 n | 285 exp 2 n Data.Nat.+ exp 2 n |
288 ∎ where | 286 ∎ where |
289 open ≡-Reasoning | 287 open ≡-Reasoning |
290 open Data.Product | 288 open Data.Product |
291 | 289 |
292 cast-iso : {n m : ℕ } → (eq : n ≡ m ) → (f : Fin m ) → cast eq ( cast (sym eq ) f) ≡ f | 290 cast-iso : {n m : ℕ } → (eq : n ≡ m ) → (f : Fin m ) → Data.Fin.cast eq ( Data.Fin.cast (sym eq ) f) ≡ f |
293 cast-iso refl zero = refl | 291 cast-iso refl zero = refl |
294 cast-iso refl (suc f) = cong ( λ k → suc k ) ( cast-iso refl f ) | 292 cast-iso refl (suc f) = cong ( λ k → suc k ) ( cast-iso refl f ) |
295 | 293 |
296 | 294 |
297 fin2List : {n : ℕ } → FiniteSet (Vec Bool n) | 295 fin2List : {n : ℕ } → FiniteSet (Vec Bool n) |
336 List2Func {Q} {suc n} fin (s≤s n<m) (h ∷ t) q with FiniteSet.F←Q fin q ≟ fromℕ< n<m | 334 List2Func {Q} {suc n} fin (s≤s n<m) (h ∷ t) q with FiniteSet.F←Q fin q ≟ fromℕ< n<m |
337 ... | yes _ = h | 335 ... | yes _ = h |
338 ... | no _ = List2Func {Q} fin (NP.<-trans n<m a<sa ) t q | 336 ... | no _ = List2Func {Q} fin (NP.<-trans n<m a<sa ) t q |
339 | 337 |
340 open import Level renaming ( suc to Suc ; zero to Zero) | 338 open import Level renaming ( suc to Suc ; zero to Zero) |
341 open import Axiom.Extensionality.Propositional | |
342 -- postulate f-extensionality : { n : Level} → Axiom.Extensionality.Propositional.Extensionality n n | |
343 | 339 |
344 F2L-iso : { Q : Set } → (fin : FiniteSet Q ) → (x : Vec Bool (FiniteSet.finite fin) ) → F2L fin a<sa (λ q _ → List2Func fin a<sa x q ) ≡ x | 340 F2L-iso : { Q : Set } → (fin : FiniteSet Q ) → (x : Vec Bool (FiniteSet.finite fin) ) → F2L fin a<sa (λ q _ → List2Func fin a<sa x q ) ≡ x |
345 F2L-iso {Q} fin x = f2l m a<sa x where | 341 F2L-iso {Q} fin x = f2l m a<sa x where |
346 m = FiniteSet.finite fin | 342 m = FiniteSet.finite fin |
347 f2l : (n : ℕ ) → (n<m : n < suc m )→ (x : Vec Bool n ) → F2L fin n<m (λ q q<n → List2Func fin n<m x q ) ≡ x | 343 f2l : (n : ℕ ) → (n<m : n < suc m )→ (x : Vec Bool n ) → F2L fin n<m (λ q q<n → List2Func fin n<m x q ) ≡ x |
361 lemma5 {suc j} (suc n) (s≤s lt) refl = s≤s (lemma5 {j} n lt refl) | 357 lemma5 {suc j} (suc n) (s≤s lt) refl = s≤s (lemma5 {j} n lt refl) |
362 lemma4 q _ | no ¬p = refl | 358 lemma4 q _ | no ¬p = refl |
363 lemma3f : F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (s≤s n<m) (h ∷ t) q ) ≡ t | 359 lemma3f : F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (s≤s n<m) (h ∷ t) q ) ≡ t |
364 lemma3f = begin | 360 lemma3f = begin |
365 F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (s≤s n<m) (h ∷ t) q ) | 361 F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (s≤s n<m) (h ∷ t) q ) |
366 ≡⟨ cong (λ k → F2L fin (NP.<-trans n<m a<sa) ( λ q q<n → k q q<n )) | 362 ≡⟨ cong (λ k → F2L fin (NP.<-trans n<m a<sa) ?) ? ⟩ |
367 (f-extensionality ( λ q → | |
368 (f-extensionality ( λ q<n → lemma4 q q<n )))) ⟩ | |
369 F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (NP.<-trans n<m a<sa) t q ) | 363 F2L fin (NP.<-trans n<m a<sa) (λ q q<n → List2Func fin (NP.<-trans n<m a<sa) t q ) |
370 ≡⟨ f2l n (NP.<-trans n<m a<sa ) t ⟩ | 364 ≡⟨ f2l n (NP.<-trans n<m a<sa ) t ⟩ |
371 t | 365 t |
372 ∎ where | 366 ∎ where |
373 open ≡-Reasoning | 367 open ≡-Reasoning |
408 a = FiniteSet.finite fin | 402 a = FiniteSet.finite fin |
409 iso : Bijection (Vec Bool a ) (A → Bool) | 403 iso : Bijection (Vec Bool a ) (A → Bool) |
410 fun← iso x = F2L fin a<sa ( λ q _ → x q ) | 404 fun← iso x = F2L fin a<sa ( λ q _ → x q ) |
411 fun→ iso x = List2Func fin a<sa x | 405 fun→ iso x = List2Func fin a<sa x |
412 fiso← iso x = F2L-iso fin x | 406 fiso← iso x = F2L-iso fin x |
413 fiso→ iso x = lemma where | 407 fiso→ iso f = lemma where |
414 lemma : List2Func fin a<sa (F2L fin a<sa (λ q _ → x q)) ≡ x | 408 lemma : List2Func fin a<sa (F2L fin a<sa (λ q _ → f q)) ≡ f |
415 lemma = f-extensionality ( λ q → L2F-iso fin x q ) | 409 lemma = ? |
416 | 410 |
417 | 411 |
418 Fin2Finite : ( n : ℕ ) → FiniteSet (Fin n) | 412 Fin2Finite : ( n : ℕ ) → FiniteSet (Fin n) |
419 Fin2Finite n = record { F←Q = λ x → x ; Q←F = λ x → x ; finiso← = λ q → refl ; finiso→ = λ q → refl } | 413 Fin2Finite n = record { F←Q = λ x → x ; Q←F = λ x → x ; finiso← = λ q → refl ; finiso→ = λ q → refl } |
420 | 414 |
424 get-elm : { n : ℕ } { A : Set } {fa : FiniteSet A } {n<m : n < FiniteSet.finite fa } → fin-less fa n<m → A | 418 get-elm : { n : ℕ } { A : Set } {fa : FiniteSet A } {n<m : n < FiniteSet.finite fa } → fin-less fa n<m → A |
425 get-elm (elm1 a _ ) = a | 419 get-elm (elm1 a _ ) = a |
426 | 420 |
427 get-< : { n : ℕ } { A : Set } {fa : FiniteSet A } {n<m : n < FiniteSet.finite fa }→ (f : fin-less fa n<m ) → toℕ (FiniteSet.F←Q fa (get-elm f )) < n | 421 get-< : { n : ℕ } { A : Set } {fa : FiniteSet A } {n<m : n < FiniteSet.finite fa }→ (f : fin-less fa n<m ) → toℕ (FiniteSet.F←Q fa (get-elm f )) < n |
428 get-< (elm1 _ b ) = b | 422 get-< (elm1 _ b ) = b |
429 | |
430 fin-less-cong : { n : ℕ } { A : Set } (fa : FiniteSet A ) (n<m : n < FiniteSet.finite fa ) | |
431 → (x y : fin-less fa n<m ) → get-elm {n} {A} {fa} x ≡ get-elm {n} {A} {fa} y → get-< x ≅ get-< y → x ≡ y | |
432 fin-less-cong fa n<m (elm1 elm x) (elm1 elm x) refl HE.refl = refl | |
433 | 423 |
434 fin-< : {A : Set} → { n : ℕ } → (fa : FiniteSet A ) → (n<m : n < FiniteSet.finite fa ) → FiniteSet (fin-less fa n<m ) | 424 fin-< : {A : Set} → { n : ℕ } → (fa : FiniteSet A ) → (n<m : n < FiniteSet.finite fa ) → FiniteSet (fin-less fa n<m ) |
435 fin-< {A} {n} fa n<m = iso-fin (Fin2Finite n) iso where | 425 fin-< {A} {n} fa n<m = iso-fin (Fin2Finite n) iso where |
436 m = FiniteSet.finite fa | 426 m = FiniteSet.finite fa |
437 iso : Bijection (Fin n) (fin-less fa n<m ) | 427 iso : Bijection (Fin n) (fin-less fa n<m ) |
438 lemma8f : {i j n : ℕ } → ( i ≡ j ) → {i<n : i < n } → {j<n : j < n } → i<n ≅ j<n | |
439 lemma8f {zero} {zero} {suc n} refl {s≤s z≤n} {s≤s z≤n} = HE.refl | |
440 lemma8f {suc i} {suc i} {suc n} refl {s≤s i<n} {s≤s j<n} = HE.cong (λ k → s≤s k ) ( lemma8f {i} {i} refl ) | |
441 lemma10f : {n i j : ℕ } → ( i ≡ j ) → {i<n : i < n } → {j<n : j < n } → fromℕ< i<n ≡ fromℕ< j<n | |
442 lemma10f refl = HE.≅-to-≡ (HE.cong (λ k → fromℕ< k ) (lemma8f refl )) | |
443 lemma3f : {a b c : ℕ } → { a<b : a < b } { b<c : b < c } { a<c : a < c } → NP.<-trans a<b b<c ≡ a<c | |
444 lemma3f {a} {b} {c} {a<b} {b<c} {a<c} = HE.≅-to-≡ (lemma8f refl) | |
445 lemma11f : {n : ℕ } {x : Fin n } → (n<m : n < m ) → toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) ≡ toℕ x | 428 lemma11f : {n : ℕ } {x : Fin n } → (n<m : n < m ) → toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) ≡ toℕ x |
446 lemma11f {n} {x} n<m = begin | 429 lemma11f {n} {x} n<m = begin |
447 toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) | 430 toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) |
448 ≡⟨ toℕ-fromℕ< _ ⟩ | 431 ≡⟨ toℕ-fromℕ< _ ⟩ |
449 toℕ x | 432 toℕ x |
473 x | 456 x |
474 ∎ where | 457 ∎ where |
475 open ≡-Reasoning | 458 open ≡-Reasoning |
476 lemma6 : toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) < n | 459 lemma6 : toℕ (fromℕ< (NP.<-trans (toℕ<n x) n<m)) < n |
477 lemma6 = subst ( λ k → k < n ) (sym (toℕ-fromℕ< (NP.<-trans (toℕ<n x) n<m))) (toℕ<n x ) | 460 lemma6 = subst ( λ k → k < n ) (sym (toℕ-fromℕ< (NP.<-trans (toℕ<n x) n<m))) (toℕ<n x ) |
478 fiso→ iso (elm1 elm x) = fin-less-cong fa n<m _ _ lemma (lemma8 (cong (λ k → toℕ (FiniteSet.F←Q fa k) ) lemma ) ) where | 461 fiso→ iso (elm1 elm x) = ? where -- fin-less-cong fa n<m _ _ lemma (lemma8 (cong (λ k → toℕ (FiniteSet.F←Q fa k) ) lemma ) ) where |
479 lemma13 : toℕ (fromℕ< x) ≡ toℕ (FiniteSet.F←Q fa elm) | 462 lemma13 : toℕ (fromℕ< x) ≡ toℕ (FiniteSet.F←Q fa elm) |
480 lemma13 = begin | 463 lemma13 = begin |
481 toℕ (fromℕ< x) | 464 toℕ (fromℕ< x) |
482 ≡⟨ toℕ-fromℕ< _ ⟩ | 465 ≡⟨ toℕ-fromℕ< _ ⟩ |
483 toℕ (FiniteSet.F←Q fa elm) | 466 toℕ (FiniteSet.F←Q fa elm) |
487 FiniteSet.Q←F fa (fromℕ< (NP.<-trans (toℕ<n (Bijection.fun← iso (elm1 elm x))) n<m)) | 470 FiniteSet.Q←F fa (fromℕ< (NP.<-trans (toℕ<n (Bijection.fun← iso (elm1 elm x))) n<m)) |
488 ≡⟨⟩ | 471 ≡⟨⟩ |
489 FiniteSet.Q←F fa (fromℕ< ( NP.<-trans (toℕ<n ( fromℕ< x ) ) n<m)) | 472 FiniteSet.Q←F fa (fromℕ< ( NP.<-trans (toℕ<n ( fromℕ< x ) ) n<m)) |
490 ≡⟨ cong (λ k → FiniteSet.Q←F fa k) (lemma10 lemma13 ) ⟩ | 473 ≡⟨ cong (λ k → FiniteSet.Q←F fa k) (lemma10 lemma13 ) ⟩ |
491 FiniteSet.Q←F fa (fromℕ< ( NP.<-trans x n<m)) | 474 FiniteSet.Q←F fa (fromℕ< ( NP.<-trans x n<m)) |
492 ≡⟨ cong (λ k → FiniteSet.Q←F fa (fromℕ< k )) (HE.≅-to-≡ (lemma8 refl)) ⟩ | 475 ≡⟨ cong (λ k → FiniteSet.Q←F fa (fromℕ< k )) ? ⟩ |
493 FiniteSet.Q←F fa (fromℕ< ( toℕ<n (FiniteSet.F←Q fa elm))) | 476 FiniteSet.Q←F fa (fromℕ< ( toℕ<n (FiniteSet.F←Q fa elm))) |
494 ≡⟨ cong (λ k → FiniteSet.Q←F fa k ) ( fromℕ<-toℕ _ _ ) ⟩ | 477 ≡⟨ cong (λ k → FiniteSet.Q←F fa k ) ( fromℕ<-toℕ _ _ ) ⟩ |
495 FiniteSet.Q←F fa (FiniteSet.F←Q fa elm ) | 478 FiniteSet.Q←F fa (FiniteSet.F←Q fa elm ) |
496 ≡⟨ FiniteSet.finiso→ fa _ ⟩ | 479 ≡⟨ FiniteSet.finiso→ fa _ ⟩ |
497 elm | 480 elm |
543 → fin-dup-in-list (F←Q finq q) (map (F←Q finq) qs) ≡ true | 526 → fin-dup-in-list (F←Q finq q) (map (F←Q finq) qs) ≡ true |
544 → dup-in-list finq q qs ≡ true | 527 → dup-in-list finq q qs ≡ true |
545 dup-in-list+fin {Q} finq q qs p = i-phase1 qs p where | 528 dup-in-list+fin {Q} finq q qs p = i-phase1 qs p where |
546 i-phase2 : (qs : List Q) → fin-phase2 (F←Q finq q) (map (F←Q finq) qs) ≡ true | 529 i-phase2 : (qs : List Q) → fin-phase2 (F←Q finq q) (map (F←Q finq) qs) ≡ true |
547 → phase2 finq q qs ≡ true | 530 → phase2 finq q qs ≡ true |
548 i-phase2 (x ∷ qs) p with equal? finq q x | inspect (equal? finq q ) x | <-fcmp (F←Q finq q) (F←Q finq x) | 531 i-phase2 (x ∷ qs) p with equal? finq q x in eq | <-fcmp (F←Q finq q) (F←Q finq x) |
549 ... | true | _ | t = refl | 532 ... | true | t = refl |
550 ... | false | _ | tri< a ¬b ¬c = i-phase2 qs p | 533 ... | false | tri< a ¬b ¬c = i-phase2 qs p |
551 ... | false | record { eq = eq } | tri≈ ¬a b ¬c = ⊥-elim (¬-bool eq | 534 ... | false | tri≈ ¬a b ¬c = ⊥-elim (¬-bool eq |
552 (subst₂ (λ j k → equal? finq j k ≡ true) (finiso→ finq q) (subst (λ k → Q←F finq k ≡ x) (sym b) (finiso→ finq x)) ( equal?-refl finq ))) | 535 (subst₂ (λ j k → equal? finq j k ≡ true) (finiso→ finq q) (subst (λ k → Q←F finq k ≡ x) (sym b) (finiso→ finq x)) ( equal?-refl finq ))) |
553 ... | false | _ | tri> ¬a ¬b c = i-phase2 qs p | 536 ... | false | tri> ¬a ¬b c = i-phase2 qs p |
554 i-phase1 : (qs : List Q) → fin-phase1 (F←Q finq q) (map (F←Q finq) qs) ≡ true | 537 i-phase1 : (qs : List Q) → fin-phase1 (F←Q finq q) (map (F←Q finq) qs) ≡ true |
555 → phase1 finq q qs ≡ true | 538 → phase1 finq q qs ≡ true |
556 i-phase1 (x ∷ qs) p with equal? finq q x | inspect (equal? finq q ) x | <-fcmp (F←Q finq q) (F←Q finq x) | 539 i-phase1 (x ∷ qs) p with equal? finq q x in eq | <-fcmp (F←Q finq q) (F←Q finq x) |
557 ... | true | record { eq = eq } | tri< a ¬b ¬c = ⊥-elim ( nat-≡< (cong (λ x → toℕ (F←Q finq x)) ( equal→refl finq eq )) a ) | 540 ... | true | tri< a ¬b ¬c = ⊥-elim ( nat-≡< (cong (λ x → toℕ (F←Q finq x)) ( equal→refl finq eq )) a ) |
558 ... | true | _ | tri≈ ¬a b ¬c = i-phase2 qs p | 541 ... | true | tri≈ ¬a b ¬c = i-phase2 qs p |
559 ... | true | record { eq = eq} | tri> ¬a ¬b c = ⊥-elim ( nat-≡< (cong (λ x → toℕ (F←Q finq x)) (sym ( equal→refl finq eq ))) c ) | 542 ... | true | tri> ¬a ¬b c = ⊥-elim ( nat-≡< (cong (λ x → toℕ (F←Q finq x)) (sym ( equal→refl finq eq ))) c ) |
560 ... | false | _ | tri< a ¬b ¬c = i-phase1 qs p | 543 ... | false | tri< a ¬b ¬c = i-phase1 qs p |
561 ... | false | record {eq = eq} | tri≈ ¬a b ¬c = ⊥-elim (¬-bool eq | 544 ... | false | tri≈ ¬a b ¬c = ⊥-elim (¬-bool eq |
562 (subst₂ (λ j k → equal? finq j k ≡ true) (finiso→ finq q) (subst (λ k → Q←F finq k ≡ x) (sym b) (finiso→ finq x)) ( equal?-refl finq ))) | 545 (subst₂ (λ j k → equal? finq j k ≡ true) (finiso→ finq q) (subst (λ k → Q←F finq k ≡ x) (sym b) (finiso→ finq x)) ( equal?-refl finq ))) |
563 ... | false | _ | tri> ¬a ¬b c = i-phase1 qs p | 546 ... | false | tri> ¬a ¬b c = i-phase1 qs p |
564 | 547 |
565 record Dup-in-list {Q : Set } (finq : FiniteSet Q) (qs : List Q) : Set where | 548 record Dup-in-list {Q : Set } (finq : FiniteSet Q) (qs : List Q) : Set where |
566 field | 549 field |
567 dup : Q | 550 dup : Q |
568 is-dup : dup-in-list finq dup qs ≡ true | 551 is-dup : dup-in-list finq dup qs ≡ true |
585 | 568 |
586 inject-fin : {A B : Set} (fa : FiniteSet A ) | 569 inject-fin : {A B : Set} (fa : FiniteSet A ) |
587 → (fi : InjectiveF B A) | 570 → (fi : InjectiveF B A) |
588 → (is-B : (a : A ) → Dec (Is B A (InjectiveF.f fi) a) ) | 571 → (is-B : (a : A ) → Dec (Is B A (InjectiveF.f fi) a) ) |
589 → FiniteSet B | 572 → FiniteSet B |
590 inject-fin {A} {B} fa fi is-B with finite fa | inspect finite fa | 573 inject-fin {A} {B} fa fi is-B with finite fa in eq1 |
591 ... | zero | record { eq = eq1 } = record { | 574 ... | zero = record { |
592 finite = 0 | 575 finite = 0 |
593 ; Q←F = λ () | 576 ; Q←F = λ () |
594 ; F←Q = λ b → ⊥-elim ( lem00 b) | 577 ; F←Q = λ b → ⊥-elim ( lem00 b) |
595 ; finiso→ = λ b → ⊥-elim ( lem00 b) | 578 ; finiso→ = λ b → ⊥-elim ( lem00 b) |
596 ; finiso← = λ () | 579 ; finiso← = λ () |
597 } where | 580 } where |
598 lem00 : ( b : B) → ⊥ | 581 lem00 : ( b : B) → ⊥ |
599 lem00 b with subst (λ k → Fin k ) eq1 (F←Q fa (InjectiveF.f fi b)) | 582 lem00 b with subst (λ k → Fin k ) eq1 (F←Q fa (InjectiveF.f fi b)) |
600 ... | () | 583 ... | () |
601 ... | suc pfa | record { eq = eq1 } = record { | 584 ... | suc pfa = record { |
602 finite = maxb | 585 finite = maxb |
603 ; Q←F = λ fb → CountB.b (cb00 _ (fin<n {_} fb)) | 586 ; Q←F = λ fb → CountB.b (cb00 _ (fin<n {_} fb)) |
604 ; F←Q = λ b → fromℕ< (cb<mb b) | 587 ; F←Q = λ b → fromℕ< (cb<mb b) |
605 ; finiso→ = iso1 | 588 ; finiso→ = iso1 |
606 ; finiso← = iso0 | 589 ; finiso← = iso0 |
641 lem00 i (suc j) (s≤s i<j) = ≤-trans (count-B-mono i<j) (lem01 j) where | 624 lem00 i (suc j) (s≤s i<j) = ≤-trans (count-B-mono i<j) (lem01 j) where |
642 lem01 : (j : ℕ) → count-B j ≤ count-B (suc j) | 625 lem01 : (j : ℕ) → count-B j ≤ count-B (suc j) |
643 lem01 zero with <-cmp (finite fa) 1 | 626 lem01 zero with <-cmp (finite fa) 1 |
644 lem01 zero | tri< a ¬b ¬c = ≤-refl | 627 lem01 zero | tri< a ¬b ¬c = ≤-refl |
645 lem01 zero | tri≈ ¬a b ¬c = ≤-refl | 628 lem01 zero | tri≈ ¬a b ¬c = ≤-refl |
646 lem01 zero | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) | is-B (Q←F fa ( fromℕ< {0} 0<fa )) | inspect count-B 0 | 629 lem01 zero | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) | is-B (Q←F fa ( fromℕ< {0} 0<fa )) |
647 ... | yes isb1 | yes isb0 | record { eq = eq0 } = s≤s z≤n | 630 ... | yes isb1 | yes isb0 = s≤s z≤n |
648 ... | yes isb1 | no nisb0 | record { eq = eq0 } = z≤n | 631 ... | yes isb1 | no nisb0 = z≤n |
649 ... | no nisb1 | yes isb0 | record { eq = eq0 } = refl-≤≡ (sym eq0) | 632 ... | no nisb1 | yes isb0 = refl-≤≡ (sym lem14 ) where |
650 ... | no nisb1 | no nisb0 | record { eq = eq0 } = z≤n | 633 lem14 : count-B 0 ≡ 1 |
651 lem01 (suc i) with <-cmp (finite fa) (suc i) | <-cmp (finite fa) (suc (suc i)) | inspect count-B (suc i) | inspect count-B (suc (suc i)) | 634 lem14 with is-B (Q←F fa ( fromℕ< {0} 0<fa )) |
652 ... | tri< a ¬b ¬c | tri< a₁ ¬b₁ ¬c₁ | record { eq = eq0 } | record { eq = eq1 } = refl-≤≡ (sym eq0) | 635 ... | yes isb = refl |
653 ... | tri< a ¬b ¬c | tri≈ ¬a b ¬c₁ | _ | _ = ⊥-elim (nat-≡< b (<-trans a a<sa)) | 636 ... | no ne = ⊥-elim (ne isb0) |
654 ... | tri< a ¬b ¬c | tri> ¬a ¬b₁ c | _ | _ = ⊥-elim (nat-<> a (<-trans a<sa c) ) | 637 ... | no nisb1 | no nisb0 = z≤n |
655 ... | tri≈ ¬a b ¬c | tri< a ¬b ¬c₁ | record { eq = eq0 } | _ = refl-≤≡ (sym eq0) | 638 lem01 (suc i) with <-cmp (finite fa) (suc i) | <-cmp (finite fa) (suc (suc i)) |
656 ... | tri≈ ¬a b ¬c | tri≈ ¬a₁ b₁ ¬c₁ | _ | _ = ⊥-elim (nat-≡< (sym b) (subst (λ k → _ < k ) (sym b₁) a<sa) ) | 639 ... | tri< a ¬b ¬c | tri< a₁ ¬b₁ ¬c₁ = refl-≤≡ (sym ? ) |
657 ... | tri≈ ¬a b ¬c | tri> ¬a₁ ¬b c | _ | _ = ⊥-elim (nat-≡< (sym b) (<-trans a<sa c)) | 640 ... | tri< a ¬b ¬c | tri≈ ¬a b ¬c₁ = ⊥-elim (nat-≡< b (<-trans a a<sa)) |
658 ... | tri> ¬a ¬b c | tri< a ¬b₁ ¬c | _ | _ = ⊥-elim (nat-≤> a (<-transʳ c a<sa ) ) | 641 ... | tri< a ¬b ¬c | tri> ¬a ¬b₁ c = ⊥-elim (nat-<> a (<-trans a<sa c) ) |
659 ... | tri> ¬a ¬b c | tri≈ ¬a₁ b ¬c | record { eq = eq0 } | record { eq = eq1 } with is-B (Q←F fa (fromℕ< c)) | 642 ... | tri≈ ¬a b ¬c | tri< a ¬b ¬c₁ = refl-≤≡ (sym ?) |
660 ... | yes isb = refl-≤≡ (sym eq0) | 643 ... | tri≈ ¬a b ¬c | tri≈ ¬a₁ b₁ ¬c₁ = ⊥-elim (nat-≡< (sym b) (subst (λ k → _ < k ) (sym b₁) a<sa) ) |
661 ... | no nisb = refl-≤≡ (sym eq0) | 644 ... | tri≈ ¬a b ¬c | tri> ¬a₁ ¬b c = ⊥-elim (nat-≡< (sym b) (<-trans a<sa c)) |
662 lem01 (suc i) | tri> ¬a ¬b c | tri> ¬a₁ ¬b₁ c₁ | record { eq = eq0 } | record { eq = eq1 } | 645 ... | tri> ¬a ¬b c | tri< a ¬b₁ ¬c = ⊥-elim (nat-≤> a (<-transʳ c a<sa ) ) |
646 ... | tri> ¬a ¬b c | tri≈ ¬a₁ b ¬c with is-B (Q←F fa (fromℕ< c)) | |
647 ... | yes isb = refl-≤≡ (sym ?) | |
648 ... | no nisb = refl-≤≡ (sym ?) | |
649 lem01 (suc i) | tri> ¬a ¬b c | tri> ¬a₁ ¬b₁ c₁ | |
663 with is-B (Q←F fa (fromℕ< c)) | is-B (Q←F fa (fromℕ< c₁)) | 650 with is-B (Q←F fa (fromℕ< c)) | is-B (Q←F fa (fromℕ< c₁)) |
664 ... | yes isb0 | yes isb1 = ≤-trans (refl-≤≡ (sym eq0)) a≤sa | 651 ... | yes isb0 | yes isb1 = ≤-trans (refl-≤≡ (sym ?)) a≤sa |
665 ... | yes isb0 | no nisb1 = refl-≤≡ (sym eq0) | 652 ... | yes isb0 | no nisb1 = refl-≤≡ (sym ?) |
666 ... | no nisb0 | yes isb1 = ≤-trans (refl-≤≡ (sym eq0)) a≤sa | 653 ... | no nisb0 | yes isb1 = ≤-trans (refl-≤≡ (sym ?)) a≤sa |
667 ... | no nisb0 | no nisb1 = refl-≤≡ (sym eq0) | 654 ... | no nisb0 | no nisb1 = refl-≤≡ (sym ?) |
668 | 655 |
669 lem31 : (b : B) → 0 < count-B (toℕ (F←Q fa (f b))) | 656 lem31 : (b : B) → 0 < count-B (toℕ (F←Q fa (f b))) |
670 lem31 b = lem32 (toℕ (F←Q fa (f b))) refl where | 657 lem31 b = lem32 (toℕ (F←Q fa (f b))) refl where |
671 lem32 : (i : ℕ) → toℕ (F←Q fa (f b)) ≡ i → 0 < count-B i | 658 lem32 : (i : ℕ) → toℕ (F←Q fa (f b)) ≡ i → 0 < count-B i |
672 lem32 zero eq with is-B (Q←F fa ( fromℕ< {0} 0<fa )) | 659 lem32 zero eq with is-B (Q←F fa ( fromℕ< {0} 0<fa )) |
677 f b ≡⟨ sym (finiso→ fa _) ⟩ | 664 f b ≡⟨ sym (finiso→ fa _) ⟩ |
678 Q←F fa ( F←Q fa (f b)) ≡⟨ sym (cong (λ k → Q←F fa k) ( fromℕ<-toℕ _ (fin<n _))) ⟩ | 665 Q←F fa ( F←Q fa (f b)) ≡⟨ sym (cong (λ k → Q←F fa k) ( fromℕ<-toℕ _ (fin<n _))) ⟩ |
679 Q←F fa ( fromℕ< (fin<n _) ) ≡⟨ cong (λ k → Q←F fa k) (fromℕ<-cong _ _ eq (fin<n _) 0<fa) ⟩ | 666 Q←F fa ( fromℕ< (fin<n _) ) ≡⟨ cong (λ k → Q←F fa k) (fromℕ<-cong _ _ eq (fin<n _) 0<fa) ⟩ |
680 Q←F fa ( fromℕ< {0} 0<fa ) ∎ where | 667 Q←F fa ( fromℕ< {0} 0<fa ) ∎ where |
681 open ≡-Reasoning | 668 open ≡-Reasoning |
682 lem32 (suc i) eq with <-cmp (finite fa) (suc i) | inspect count-B (suc i) | 669 lem32 (suc i) eq with <-cmp (finite fa) (suc i) |
683 ... | tri< a ¬b ¬c | _ = ⊥-elim ( nat-≡< eq (<-trans (fin<n _) a) ) | 670 ... | tri< a ¬b ¬c = ⊥-elim ( nat-≡< eq (<-trans (fin<n _) a) ) |
684 ... | tri≈ ¬a eq1 ¬c | _ = ⊥-elim ( nat-≡< eq (subst (λ k → toℕ (F←Q fa (f b)) < k ) eq1 (fin<n _))) | 671 ... | tri≈ ¬a eq1 ¬c = ⊥-elim ( nat-≡< eq (subst (λ k → toℕ (F←Q fa (f b)) < k ) eq1 (fin<n _))) |
685 ... | tri> ¬a ¬b c | record { eq = eq1 } with is-B (Q←F fa (fromℕ< c)) | 672 ... | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) |
686 ... | yes isb = s≤s z≤n | 673 ... | yes isb = s≤s z≤n |
687 ... | no nisb = ⊥-elim ( nisb record { a = b ; fa=c = lem33 } ) where | 674 ... | no nisb = ⊥-elim ( nisb record { a = b ; fa=c = lem33 } ) where |
688 lem33 : f b ≡ Q←F fa ( fromℕ< c) | 675 lem33 : f b ≡ Q←F fa ( fromℕ< c) |
689 lem33 = begin | 676 lem33 = begin |
690 f b ≡⟨ sym (finiso→ fa _) ⟩ | 677 f b ≡⟨ sym (finiso→ fa _) ⟩ |
711 lem20 : (i j : ℕ) → i < j → (i<fa : i < finite fa) (j<fa : j < finite fa) | 698 lem20 : (i j : ℕ) → i < j → (i<fa : i < finite fa) (j<fa : j < finite fa) |
712 → Is B A f (Q←F fa (fromℕ< i<fa)) → Is B A f (Q←F fa (fromℕ< j<fa)) → count-B i < count-B j | 699 → Is B A f (Q←F fa (fromℕ< i<fa)) → Is B A f (Q←F fa (fromℕ< j<fa)) → count-B i < count-B j |
713 lem20 zero (suc j) i<j i<fa j<fa bi bj with <-cmp (finite fa) (suc j) | 700 lem20 zero (suc j) i<j i<fa j<fa bi bj with <-cmp (finite fa) (suc j) |
714 ... | tri< a ¬b ¬c = ⊥-elim (¬c j<fa) | 701 ... | tri< a ¬b ¬c = ⊥-elim (¬c j<fa) |
715 ... | tri≈ ¬a b ¬c = ⊥-elim (¬c j<fa) | 702 ... | tri≈ ¬a b ¬c = ⊥-elim (¬c j<fa) |
716 ... | tri> ¬a ¬b c with is-B (Q←F fa ( fromℕ< 0<fa )) | inspect count-B 0 | is-B (Q←F fa (fromℕ< c)) | inspect count-B (suc j) | 703 ... | tri> ¬a ¬b c with is-B (Q←F fa ( fromℕ< 0<fa )) | is-B (Q←F fa (fromℕ< c)) |
717 ... | no nisc | _ | _ | _ = ⊥-elim (nisc record { a = Is.a bi ; fa=c = lem26 } ) where | 704 ... | no nisc | _ = ⊥-elim (nisc record { a = Is.a bi ; fa=c = lem26 } ) where |
718 lem26 : f (Is.a bi) ≡ Q←F fa (fromℕ< 0<fa) | 705 lem26 : f (Is.a bi) ≡ Q←F fa (fromℕ< 0<fa) |
719 lem26 = trans (Is.fa=c bi) (cong (Q←F fa) (fromℕ<-cong _ _ refl i<fa 0<fa) ) | 706 lem26 = trans (Is.fa=c bi) (cong (Q←F fa) (fromℕ<-cong _ _ refl i<fa 0<fa) ) |
720 ... | yes _ | _ | no nisc | _ = ⊥-elim (nisc record { a = Is.a bj ; fa=c = lem26 } ) where | 707 ... | yes _ | no nisc = ⊥-elim (nisc record { a = Is.a bj ; fa=c = lem26 } ) where |
721 lem26 : f (Is.a bj) ≡ Q←F fa (fromℕ< c) | 708 lem26 : f (Is.a bj) ≡ Q←F fa (fromℕ< c) |
722 lem26 = trans (Is.fa=c bj) (cong (Q←F fa) (fromℕ<-cong _ _ refl j<fa c) ) | 709 lem26 = trans (Is.fa=c bj) (cong (Q←F fa) (fromℕ<-cong _ _ refl j<fa c) ) |
723 ... | yes _ | record { eq = eq1 } | yes _ | record { eq = eq2 } = lem25 where | 710 ... | yes _ | yes _ = lem25 where |
724 lem25 : 2 ≤ suc (count-B j) | 711 lem25 : 2 ≤ suc (count-B j) |
725 lem25 = begin | 712 lem25 = begin |
726 2 ≡⟨ cong suc (sym eq1) ⟩ | 713 2 ≡⟨ cong suc (sym ?) ⟩ |
727 suc (count-B 0) ≤⟨ s≤s (count-B-mono {0} {j} z≤n) ⟩ | 714 suc (count-B 0) ≤⟨ s≤s (count-B-mono {0} {j} z≤n) ⟩ |
728 suc (count-B j) ∎ where open ≤-Reasoning | 715 suc (count-B j) ∎ where open ≤-Reasoning |
729 lem20 (suc i) zero () i<fa j<fa bi bj | 716 lem20 (suc i) zero () i<fa j<fa bi bj |
730 lem20 (suc i) (suc j) (s≤s i<j) i<fa j<fa bi bj = lem21 where | 717 lem20 (suc i) (suc j) (s≤s i<j) i<fa j<fa bi bj = lem21 where |
731 -- | 718 -- |
734 -- | 721 -- |
735 lem23 : suc (count-B j) ≡ count-B (suc j) | 722 lem23 : suc (count-B j) ≡ count-B (suc j) |
736 lem23 with <-cmp (finite fa) (suc j) | 723 lem23 with <-cmp (finite fa) (suc j) |
737 ... | tri< a ¬b ¬c = ⊥-elim (¬c j<fa) | 724 ... | tri< a ¬b ¬c = ⊥-elim (¬c j<fa) |
738 ... | tri≈ ¬a b ¬c = ⊥-elim (¬c j<fa) | 725 ... | tri≈ ¬a b ¬c = ⊥-elim (¬c j<fa) |
739 ... | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) | inspect count-B (suc j) | 726 ... | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) |
740 ... | yes _ | record { eq = eq1 } = refl | 727 ... | yes _ = refl |
741 ... | no nisa | _ = ⊥-elim ( nisa record { a = Is.a bj ; fa=c = lem26 } ) where | 728 ... | no nisa = ⊥-elim ( nisa record { a = Is.a bj ; fa=c = lem26 } ) where |
742 lem26 : f (Is.a bj) ≡ Q←F fa (fromℕ< c) | 729 lem26 : f (Is.a bj) ≡ Q←F fa (fromℕ< c) |
743 lem26 = trans (Is.fa=c bj) (cong (Q←F fa) (fromℕ<-cong _ _ refl j<fa c) ) | 730 lem26 = trans (Is.fa=c bj) (cong (Q←F fa) (fromℕ<-cong _ _ refl j<fa c) ) |
744 lem21 : count-B (suc i) < count-B (suc j) | 731 lem21 : count-B (suc i) < count-B (suc j) |
745 lem21 = sx≤py→x≤y ( begin | 732 lem21 = sx≤py→x≤y ( begin |
746 suc (suc (count-B (suc i))) ≤⟨ s≤s ( s≤s ( count-B-mono i<j )) ⟩ | 733 suc (suc (count-B (suc i))) ≤⟨ s≤s ( s≤s ( count-B-mono i<j )) ⟩ |
753 ... | tri< a ¬b ¬c = ⊥-elim (nat-≡< eq ( lem20 i j a i<fa j<fa bi bj )) | 740 ... | tri< a ¬b ¬c = ⊥-elim (nat-≡< eq ( lem20 i j a i<fa j<fa bi bj )) |
754 ... | tri≈ ¬a b ¬c = b | 741 ... | tri≈ ¬a b ¬c = b |
755 ... | tri> ¬a ¬b c₁ = ⊥-elim (nat-≡< (sym eq) ( lem20 j i c₁ j<fa i<fa bj bi )) | 742 ... | tri> ¬a ¬b c₁ = ⊥-elim (nat-≡< (sym eq) ( lem20 j i c₁ j<fa i<fa bj bi )) |
756 | 743 |
757 lem09 : (i j : ℕ) → suc n ≤ j → j ≡ count-B i → CountB n | 744 lem09 : (i j : ℕ) → suc n ≤ j → j ≡ count-B i → CountB n |
758 lem09 0 (suc j) (s≤s le) eq with is-B (Q←F fa (fromℕ< {0} 0<fa )) | inspect count-B 0 | 745 lem09 0 (suc j) (s≤s le) eq with is-B (Q←F fa (fromℕ< {0} 0<fa )) |
759 ... | no nisb | record { eq = eq1 } = ⊥-elim ( nat-≡< (sym eq) (s≤s z≤n) ) | 746 ... | no nisb = ⊥-elim ( nat-≡< (sym eq) (s≤s z≤n) ) |
760 ... | yes isb | record { eq = eq1 } with ≤-∨ (s≤s le) | 747 ... | yes isb with ≤-∨ (s≤s le) |
761 ... | case1 eq2 = record { b = Is.a isb ; cb = 0 ; b=cn = lem10 ; cb=n = trans eq1 (sym (trans eq2 eq)) | 748 ... | case1 eq2 = record { b = Is.a isb ; cb = 0 ; b=cn = lem10 ; cb=n = trans ? (sym (trans eq2 eq)) |
762 ; cb-inject = λ cb1 c1<fa b1 eq → lem06 0 cb1 0<fa c1<fa isb b1 eq } where | 749 ; cb-inject = λ cb1 c1<fa b1 eq → lem06 0 cb1 0<fa c1<fa isb b1 eq } where |
763 lem10 : 0 ≡ toℕ (F←Q fa (f (Is.a isb))) | 750 lem10 : 0 ≡ toℕ (F←Q fa (f (Is.a isb))) |
764 lem10 = begin | 751 lem10 = begin |
765 0 ≡⟨ sym ( toℕ-fromℕ< 0<fa ) ⟩ | 752 0 ≡⟨ sym ( toℕ-fromℕ< 0<fa ) ⟩ |
766 toℕ (fromℕ< {0} 0<fa ) ≡⟨ cong toℕ (sym (finiso← fa _)) ⟩ | 753 toℕ (fromℕ< {0} 0<fa ) ≡⟨ cong toℕ (sym (finiso← fa _)) ⟩ |
767 toℕ (F←Q fa (Q←F fa (fromℕ< {0} 0<fa ))) ≡⟨ cong (λ k → toℕ ((F←Q fa k))) (sym (Is.fa=c isb)) ⟩ | 754 toℕ (F←Q fa (Q←F fa (fromℕ< {0} 0<fa ))) ≡⟨ cong (λ k → toℕ ((F←Q fa k))) (sym (Is.fa=c isb)) ⟩ |
768 toℕ (F←Q fa (f (Is.a isb))) ∎ where open ≡-Reasoning | 755 toℕ (F←Q fa (f (Is.a isb))) ∎ where open ≡-Reasoning |
769 ... | case2 (s≤s lt) = ⊥-elim ( nat-≡< (sym eq) (s≤s (<-transʳ z≤n lt) )) | 756 ... | case2 (s≤s lt) = ⊥-elim ( nat-≡< (sym eq) (s≤s (<-transʳ z≤n lt) )) |
770 lem09 (suc i) (suc j) (s≤s le) eq with <-cmp (finite fa) (suc i) | inspect count-B (suc i) | 757 lem09 (suc i) (suc j) (s≤s le) eq with <-cmp (finite fa) (suc i) |
771 ... | tri< a ¬b ¬c | _ = lem09 i (suc j) (s≤s le) eq | 758 ... | tri< a ¬b ¬c = lem09 i (suc j) (s≤s le) eq |
772 ... | tri≈ ¬a b ¬c | _ = lem09 i (suc j) (s≤s le) eq | 759 ... | tri≈ ¬a b ¬c = lem09 i (suc j) (s≤s le) eq |
773 ... | tri> ¬a ¬b c | record { eq = eq1 } with is-B (Q←F fa (fromℕ< c)) | 760 ... | tri> ¬a ¬b c with is-B (Q←F fa (fromℕ< c)) |
774 ... | no nisb = lem09 i (suc j) (s≤s le) eq | 761 ... | no nisb = lem09 i (suc j) (s≤s le) eq |
775 ... | yes isb with ≤-∨ (s≤s le) | 762 ... | yes isb with ≤-∨ (s≤s le) |
776 ... | case1 eq2 = record { b = Is.a isb ; cb = suc i ; b=cn = lem11 ; cb=n = trans eq1 (sym (trans eq2 eq )) | 763 ... | case1 eq2 = record { b = Is.a isb ; cb = suc i ; b=cn = lem11 ; cb=n = trans ? (sym (trans eq2 eq )) |
777 ; cb-inject = λ cb1 c1<fa b1 eq → lem06 (suc i) cb1 c c1<fa isb b1 eq } where | 764 ; cb-inject = λ cb1 c1<fa b1 eq → lem06 (suc i) cb1 c c1<fa isb b1 eq } where |
778 lem11 : suc i ≡ toℕ (F←Q fa (f (Is.a isb))) | 765 lem11 : suc i ≡ toℕ (F←Q fa (f (Is.a isb))) |
779 lem11 = begin | 766 lem11 = begin |
780 suc i ≡⟨ sym ( toℕ-fromℕ< c) ⟩ | 767 suc i ≡⟨ sym ( toℕ-fromℕ< c) ⟩ |
781 toℕ (fromℕ< c) ≡⟨ cong toℕ (sym (finiso← fa _)) ⟩ | 768 toℕ (fromℕ< c) ≡⟨ cong toℕ (sym (finiso← fa _)) ⟩ |