Mercurial > hg > Members > kono > Proof > category
comparison monoidal.agda @ 715:1be42267eeee
add some tools
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 24 Nov 2017 11:32:41 +0900 |
parents | bc21e89cd273 |
children | 35457f9568f3 |
comparison
equal
deleted
inserted
replaced
714:bc21e89cd273 | 715:1be42267eeee |
---|---|
361 : Set (suc (suc c₁)) where | 361 : Set (suc (suc c₁)) where |
362 isM : IsMonoidal (Sets {c₁}) One SetsTensorProduct | 362 isM : IsMonoidal (Sets {c₁}) One SetsTensorProduct |
363 isM = Monoidal.isMonoidal MonoidalSets | 363 isM = Monoidal.isMonoidal MonoidalSets |
364 open IsMonoidal | 364 open IsMonoidal |
365 field | 365 field |
366 law1 : { a b c d : Obj Sets } { x : FObj F a} { y : FObj F b} { f : a → c } { g : b → d } | 366 natφ : { a b c d : Obj Sets } { x : FObj F a} { y : FObj F b} { f : a → c } { g : b → d } |
367 → FMap F (map f g) (φ (x , y)) ≡ φ (FMap F f x , FMap F g y) | 367 → FMap F (map f g) (φ (x , y)) ≡ φ (FMap F f x , FMap F g y) |
368 law2 : { x y z : Obj Sets } { a : FObj F x } { b : FObj F y }{ c : FObj F z } | 368 assocφ : { x y z : Obj Sets } { a : FObj F x } { b : FObj F y }{ c : FObj F z } |
369 → φ (a , φ (b , c)) ≡ FMap F (Iso.≅→ (mα-iso isM)) (φ (φ (a , b) , c)) | 369 → φ (a , φ (b , c)) ≡ FMap F (Iso.≅→ (mα-iso isM)) (φ (φ (a , b) , c)) |
370 law3 : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (mρ-iso isM)) (φ (x , unit)) ≡ x | 370 idrφ : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (mρ-iso isM)) (φ (x , unit)) ≡ x |
371 law4 : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (mλ-iso isM)) (φ (unit , x)) ≡ x | 371 idlφ : {a : Obj Sets } { x : FObj F a } → FMap F (Iso.≅→ (mλ-iso isM)) (φ (unit , x)) ≡ x |
372 | 372 |
373 -- http://www.staff.city.ac.uk/~ross/papers/Applicative.pdf | 373 -- http://www.staff.city.ac.uk/~ross/papers/Applicative.pdf |
374 -- naturality of φ fmap(f × g)(φ u v) = φ ( fmap f u) ( fmap g v ) | 374 -- naturality of φ fmap(f × g)(φ u v) = φ ( fmap f u) ( fmap g v ) |
375 -- left identity fmap snd (φ unit v) = v | 375 -- left identity fmap snd (φ unit v) = v |
376 -- right identity fmap fst (φ u unit) = u | 376 -- right identity fmap fst (φ u unit) = u |
415 (FMap (Functor⊗ Sets Sets MonoidalSets F) (f , g) ) (φ (x , y)) | 415 (FMap (Functor⊗ Sets Sets MonoidalSets F) (f , g) ) (φ (x , y)) |
416 ≡⟨⟩ | 416 ≡⟨⟩ |
417 (FMap F ( f □ g ) ) (φ (x , y)) | 417 (FMap F ( f □ g ) ) (φ (x , y)) |
418 ≡⟨⟩ | 418 ≡⟨⟩ |
419 FMap F ( map f g ) (φ (x , y)) | 419 FMap F ( map f g ) (φ (x , y)) |
420 ≡⟨ IsHaskellMonoidalFunctor.law1 ismf ⟩ | 420 ≡⟨ IsHaskellMonoidalFunctor.natφ ismf ⟩ |
421 φ ( FMap F f x , FMap F g y ) | 421 φ ( FMap F f x , FMap F g y ) |
422 ≡⟨⟩ | 422 ≡⟨⟩ |
423 φ ( ( FMap F f □ FMap F g ) (x , y) ) | 423 φ ( ( FMap F f □ FMap F g ) (x , y) ) |
424 ≡⟨⟩ | 424 ≡⟨⟩ |
425 φ ((FMap (Functor● Sets Sets MonoidalSets F) (f , g) ) (x , y) ) | 425 φ ((FMap (Functor● Sets Sets MonoidalSets F) (f , g) ) (x , y) ) |
433 (Sets [ FMap F (Iso.≅→ (mα-iso isM)) o Sets [ φ o φ □ id1 Sets (FObj F c) ] ]) x | 433 (Sets [ FMap F (Iso.≅→ (mα-iso isM)) o Sets [ φ o φ □ id1 Sets (FObj F c) ] ]) x |
434 comm10 {x} {y} {f} ((a , b) , c ) = begin | 434 comm10 {x} {y} {f} ((a , b) , c ) = begin |
435 φ (( id1 Sets (FObj F x) □ φ ) ( ( Iso.≅→ (mα-iso isM) ) ((a , b) , c))) | 435 φ (( id1 Sets (FObj F x) □ φ ) ( ( Iso.≅→ (mα-iso isM) ) ((a , b) , c))) |
436 ≡⟨⟩ | 436 ≡⟨⟩ |
437 φ ( a , φ (b , c)) | 437 φ ( a , φ (b , c)) |
438 ≡⟨ IsHaskellMonoidalFunctor.law2 ismf ⟩ | 438 ≡⟨ IsHaskellMonoidalFunctor.assocφ ismf ⟩ |
439 ( FMap F (Iso.≅→ (mα-iso isM))) (φ (( φ (a , b)) , c )) | 439 ( FMap F (Iso.≅→ (mα-iso isM))) (φ (( φ (a , b)) , c )) |
440 ≡⟨⟩ | 440 ≡⟨⟩ |
441 ( FMap F (Iso.≅→ (mα-iso isM))) (φ (( φ □ id1 Sets (FObj F f) ) ((a , b) , c))) | 441 ( FMap F (Iso.≅→ (mα-iso isM))) (φ (( φ □ id1 Sets (FObj F f) ) ((a , b) , c))) |
442 ∎ | 442 ∎ |
443 where | 443 where |
449 comm20 : {a b : Obj Sets} ( x : FObj F a * One ) → ( Sets [ | 449 comm20 : {a b : Obj Sets} ( x : FObj F a * One ) → ( Sets [ |
450 FMap F (Iso.≅→ (mρ-iso isM)) o Sets [ φ o | 450 FMap F (Iso.≅→ (mρ-iso isM)) o Sets [ φ o |
451 FMap (m-bi MonoidalSets) (id1 Sets (FObj F a) , (λ _ → unit )) ] ] ) x ≡ Iso.≅→ (mρ-iso isM) x | 451 FMap (m-bi MonoidalSets) (id1 Sets (FObj F a) , (λ _ → unit )) ] ] ) x ≡ Iso.≅→ (mρ-iso isM) x |
452 comm20 {a} {b} (x , OneObj ) = begin | 452 comm20 {a} {b} (x , OneObj ) = begin |
453 (FMap F (Iso.≅→ (mρ-iso isM))) ( φ ( x , unit ) ) | 453 (FMap F (Iso.≅→ (mρ-iso isM))) ( φ ( x , unit ) ) |
454 ≡⟨ IsHaskellMonoidalFunctor.law3 ismf ⟩ | 454 ≡⟨ IsHaskellMonoidalFunctor.idrφ ismf ⟩ |
455 x | 455 x |
456 ≡⟨⟩ | 456 ≡⟨⟩ |
457 Iso.≅→ (mρ-iso isM) ( x , OneObj ) | 457 Iso.≅→ (mρ-iso isM) ( x , OneObj ) |
458 ∎ | 458 ∎ |
459 where | 459 where |
465 comm30 : {a b : Obj Sets} ( x : One * FObj F b ) → ( Sets [ | 465 comm30 : {a b : Obj Sets} ( x : One * FObj F b ) → ( Sets [ |
466 FMap F (Iso.≅→ (mλ-iso isM)) o Sets [ φ o | 466 FMap F (Iso.≅→ (mλ-iso isM)) o Sets [ φ o |
467 FMap (m-bi MonoidalSets) ((λ _ → unit ) , id1 Sets (FObj F b) ) ] ] ) x ≡ Iso.≅→ (mλ-iso isM) x | 467 FMap (m-bi MonoidalSets) ((λ _ → unit ) , id1 Sets (FObj F b) ) ] ] ) x ≡ Iso.≅→ (mλ-iso isM) x |
468 comm30 {a} {b} ( OneObj , x) = begin | 468 comm30 {a} {b} ( OneObj , x) = begin |
469 (FMap F (Iso.≅→ (mλ-iso isM))) ( φ ( unit , x ) ) | 469 (FMap F (Iso.≅→ (mλ-iso isM))) ( φ ( unit , x ) ) |
470 ≡⟨ IsHaskellMonoidalFunctor.law4 ismf ⟩ | 470 ≡⟨ IsHaskellMonoidalFunctor.idlφ ismf ⟩ |
471 x | 471 x |
472 ≡⟨⟩ | 472 ≡⟨⟩ |
473 Iso.≅→ (mλ-iso isM) ( OneObj , x ) | 473 Iso.≅→ (mλ-iso isM) ( OneObj , x ) |
474 ∎ | 474 ∎ |
475 where | 475 where |
515 where | 515 where |
516 open HaskellMonoidalFunctor | 516 open HaskellMonoidalFunctor |
517 pure : {a : Obj Sets} → Hom Sets a ( FObj F a ) | 517 pure : {a : Obj Sets} → Hom Sets a ( FObj F a ) |
518 pure {a} x = FMap F ( λ y → x ) (unit mono) | 518 pure {a} x = FMap F ( λ y → x ) (unit mono) |
519 <*> : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b -- ** mono x y | 519 <*> : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b -- ** mono x y |
520 <*> {a} {b} x y = FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b ) ) (φ mono ( x , y )) | 520 <*> {a} {b} x y = FMap F ( λ r → ( proj₁ r ) ( proj₂ r ) ) (φ mono ( x , y )) |
521 | 521 |
522 open Relation.Binary.PropositionalEquality | |
523 | 522 |
524 HaskellMonoidal→Applicative : {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) ) | 523 HaskellMonoidal→Applicative : {c₁ : Level} ( F : Functor (Sets {c₁}) (Sets {c₁}) ) |
525 ( unit : FObj F One ) | 524 ( unit : FObj F One ) |
526 ( φ : {a b : Obj Sets} → Hom Sets ((FObj F a) * (FObj F b )) ( FObj F ( a * b ) ) ) | 525 ( φ : {a b : Obj Sets} → Hom Sets ((FObj F a) * (FObj F b )) ( FObj F ( a * b ) ) ) |
527 ( mono : IsHaskellMonoidalFunctor F unit φ ) | 526 ( mono : IsHaskellMonoidalFunctor F unit φ ) |
528 → IsApplicative F (λ x → FMap F ( λ y → x ) unit) (λ x y → FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b ) ) (φ ( x , y ))) | 527 → IsApplicative F (λ x → FMap F ( λ y → x ) unit) (λ x y → FMap F ( λ r → ( proj₁ r ) ( proj₂ r ) ) (φ ( x , y ))) |
529 HaskellMonoidal→Applicative {c₁} F unit φ mono = record { | 528 HaskellMonoidal→Applicative {c₁} F unit φ mono = record { |
530 identity = identity | 529 identity = identity |
531 ; composition = composition | 530 ; composition = composition |
532 ; homomorphism = homomorphism | 531 ; homomorphism = homomorphism |
533 ; interchange = interchange | 532 ; interchange = interchange |
535 where | 534 where |
536 id : { a : Obj Sets } → a → a | 535 id : { a : Obj Sets } → a → a |
537 id x = x | 536 id x = x |
538 isM : IsMonoidal (Sets {c₁}) One SetsTensorProduct | 537 isM : IsMonoidal (Sets {c₁}) One SetsTensorProduct |
539 isM = Monoidal.isMonoidal MonoidalSets | 538 isM = Monoidal.isMonoidal MonoidalSets |
540 open IsMonoidal | |
541 pure : {a : Obj Sets} → Hom Sets a ( FObj F a ) | 539 pure : {a : Obj Sets} → Hom Sets a ( FObj F a ) |
542 pure {a} x = FMap F ( λ y → x ) (unit ) | 540 pure {a} x = FMap F ( λ y → x ) (unit ) |
543 _<*>_ : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b | 541 _<*>_ : {a b : Obj Sets} → FObj F ( a → b ) → FObj F a → FObj F b |
544 _<*>_ {a} {b} x y = FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b ) ) (φ ( x , y )) | 542 _<*>_ {a} {b} x y = FMap F ( λ r → ( proj₁ r ) ( proj₂ r ) ) (φ ( x , y )) |
545 _・_ : { a b c : Obj (Sets {c₁} ) } → (b → c) → (a → b) → a → c | 543 _・_ : { a b c : Obj (Sets {c₁} ) } → (b → c) → (a → b) → a → c |
546 _・_ f g = λ x → f ( g x ) | 544 _・_ f g = λ x → f ( g x ) |
545 left : {n : Level} { a b : Set n} → { x y : a } { h : a → b } → ( x ≡ y ) → h x ≡ h y | |
546 left {_} {_} {_} {_} {_} {h} eq = ≡-cong ( λ k → h k ) eq | |
547 right : {n : Level} { a b : Set n} → { x y : a → b } { h : a } → ( x ≡ y ) → x h ≡ y h | |
548 right {_} {_} {_} {_} {_} {h} eq = ≡-cong ( λ k → k h ) eq | |
549 open Relation.Binary.PropositionalEquality | |
550 φ→F : { a b c d e : Obj Sets } { g : Hom Sets a c } { h : Hom Sets b d } | |
551 { f : Hom Sets (c * d) e } | |
552 { x : FObj F a } { y : FObj F b } | |
553 → FMap F f ( φ ( FMap F g x , FMap F h y ) ) ≡ FMap F ( f o map g h ) ( φ ( x , y ) ) | |
554 φ→F {a} {b} {c} {d} {e} {g} {h} {f} {x} {y} = sym ( begin | |
555 FMap F ( f o map g h ) ( φ ( x , y ) ) | |
556 ≡⟨ ≡-cong ( λ k → k ( φ ( x , y ))) ( IsFunctor.distr (isFunctor F) ) ⟩ | |
557 FMap F f (( FMap F ( map g h ) ) ( φ ( x , y ))) | |
558 ≡⟨ ≡-cong ( λ k → FMap F f k ) ( IsHaskellMonoidalFunctor.natφ mono ) ⟩ | |
559 FMap F f ( φ ( FMap F g x , FMap F h y ) ) | |
560 ∎ ) | |
561 where | |
562 open Relation.Binary.PropositionalEquality.≡-Reasoning | |
563 unit→F : {a : Obj Sets } {u : FObj F a} → u ≡ FMap F id u | |
564 unit→F {a} {u} = sym ( ≡-cong ( λ k → k u ) ( IsFunctor.identity ( isFunctor F ) ) ) | |
565 open IsMonoidal | |
547 identity : { a : Obj Sets } { u : FObj F a } → pure ( id1 Sets a ) <*> u ≡ u | 566 identity : { a : Obj Sets } { u : FObj F a } → pure ( id1 Sets a ) <*> u ≡ u |
548 identity {a} {u} = begin | 567 identity {a} {u} = begin |
549 pure id <*> u | 568 pure id <*> u |
550 ≡⟨⟩ | 569 ≡⟨⟩ |
551 ( FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b )) ) ( φ ( FMap F ( λ y → id ) unit , u ) ) | 570 ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , u ) ) |
552 ≡⟨ sym ( ≡-cong ( λ k → ( FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b )) ) ( φ ( FMap F ( λ y → id ) unit , k u ))) | 571 ≡⟨ ≡-cong ( λ k → ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , k ))) unit→F ⟩ |
553 ( IsFunctor.identity ( Functor.isFunctor F ) ) ) ⟩ | 572 ( FMap F ( λ r → ( proj₁ r ) ( proj₂ r )) ) ( φ ( FMap F ( λ y → id ) unit , FMap F id u ) ) |
554 ( FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b )) ) ( φ ( FMap F ( λ y → id ) unit , FMap F id u ) ) | 573 ≡⟨ φ→F ⟩ |
555 ≡⟨ sym ( ≡-cong ( λ k → ( FMap F ( λ a→b*b → ( proj₁ a→b*b ) ( proj₂ a→b*b )) ) k ) ( IsHaskellMonoidalFunctor.law1 mono ) ) ⟩ | |
556 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (FMap F (map (λ y → id) id) (φ (unit , u ))) | |
557 ≡⟨ ≡-cong ( λ k → k (φ (unit , u ) )) ( sym ( IsFunctor.distr ( Functor.isFunctor F ) ) ) ⟩ | |
558 FMap F (λ x → (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) ((map (λ y → id) id) x )) (φ (unit , u ) ) | |
559 ≡⟨⟩ | |
560 FMap F (λ x → proj₂ x ) (φ (unit , u ) ) | 574 FMap F (λ x → proj₂ x ) (φ (unit , u ) ) |
561 ≡⟨⟩ | 575 ≡⟨⟩ |
562 FMap F (Iso.≅→ (mλ-iso isM)) (φ (unit , u )) | 576 FMap F (Iso.≅→ (mλ-iso isM)) (φ (unit , u )) |
563 ≡⟨ IsHaskellMonoidalFunctor.law4 mono ⟩ | 577 ≡⟨ IsHaskellMonoidalFunctor.idlφ mono ⟩ |
564 u | 578 u |
565 ∎ | 579 ∎ |
566 where | 580 where |
567 open Relation.Binary.PropositionalEquality.≡-Reasoning | 581 open Relation.Binary.PropositionalEquality.≡-Reasoning |
568 composition : { a b c : Obj Sets } { u : FObj F ( b → c ) } { v : FObj F (a → b ) } { w : FObj F a } | 582 composition : { a b c : Obj Sets } { u : FObj F ( b → c ) } { v : FObj F (a → b ) } { w : FObj F a } |
569 → (( pure _・_ <*> u ) <*> v ) <*> w ≡ u <*> (v <*> w) | 583 → (( pure _・_ <*> u ) <*> v ) <*> w ≡ u <*> (v <*> w) |
570 composition {a} {b} {c} {u} {v} {w} = begin | 584 composition {a} {b} {c} {u} {v} {w} = begin |
571 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ | 585 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ |
572 (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ y f g x → f (g x)) unit , u)) , v)) , w)) | 586 (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f g x → f (g x)) unit , u)) , v)) , w)) |
573 ≡⟨ {!!} ⟩ | 587 ≡⟨ {!!} ⟩ |
574 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ | 588 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ |
575 (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ y f g x → f (g x)) unit , FMap F id u)) , FMap F id v)) , FMap F id w)) | 589 (FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ y f g x → f (g x)) unit , FMap F id u)) , FMap F id v)) , FMap F id w)) |
576 ≡⟨ {!!} ⟩ | 590 ≡⟨ {!!} ⟩ |
577 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ | 591 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ |
578 (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (FMap F (map (λ y f g x → f (g x)) id ) (φ ( unit , u))) , FMap F id v)) , FMap F id w)) | 592 (FMap F (λ r → proj₁ r (proj₂ r)) (FMap F (map (λ y f g x → f (g x)) id ) (φ ( unit , u))) , FMap F id v)) , FMap F id w)) |
579 ≡⟨ {!!} ⟩ | 593 ≡⟨ {!!} ⟩ |
580 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ | 594 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ |
581 (FMap F ( λ x → (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) ((map (λ y f g x → f (g x)) id ) x)) (φ ( unit , u)) , FMap F id v)) , FMap F id w)) | 595 (FMap F ( λ x → (λ r → proj₁ r (proj₂ r)) ((map (λ y f g x → f (g x)) id ) x)) (φ ( unit , u)) , FMap F id v)) , FMap F id w)) |
582 ≡⟨⟩ | 596 ≡⟨⟩ |
583 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ | 597 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) (φ |
584 (FMap F ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) (φ ( unit , u)) , FMap F id v)) , FMap F id w)) | 598 (FMap F ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) (φ ( unit , u)) , FMap F id v)) , FMap F id w)) |
585 ≡⟨ {!!} ⟩ | 599 ≡⟨ {!!} ⟩ |
586 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) ( | 600 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F (λ r → proj₁ r (proj₂ r)) ( |
587 FMap F ( map ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) id ) ( φ ( φ ( unit , u) , v))) , FMap F id w)) | 601 FMap F ( map ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) id ) ( φ ( φ ( unit , u) , v))) , FMap F id w)) |
588 ≡⟨ {!!} ⟩ | 602 ≡⟨ {!!} ⟩ |
589 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ ( | 603 FMap F (λ r → proj₁ r (proj₂ r)) (φ ( |
590 FMap F ( λ x → (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (( map ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) id ) x)) ( φ ( φ ( unit , u) , v)) | 604 FMap F ( λ x → (λ r → proj₁ r (proj₂ r)) (( map ( λ y → (λ f g x → f (g x)) (proj₂ y ) ) id ) x)) ( φ ( φ ( unit , u) , v)) |
591 , FMap F id w)) | 605 , FMap F id w)) |
592 ≡⟨⟩ | 606 ≡⟨⟩ |
593 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ ( | 607 FMap F (λ r → proj₁ r (proj₂ r)) (φ ( |
594 FMap F ( λ z → ((( λ f g x → f (g x)) (proj₂ (proj₁ z))) ( proj₂ z ))) ( φ ( φ ( unit , u) , v)) | 608 FMap F ( λ z → ((( λ f g x → f (g x)) (proj₂ (proj₁ z))) ( proj₂ z ))) ( φ ( φ ( unit , u) , v)) |
595 , FMap F id w)) | 609 , FMap F id w)) |
596 ≡⟨ {!!} ⟩ | 610 ≡⟨⟩ |
597 FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (u , FMap F (λ a→b*b → proj₁ a→b*b (proj₂ a→b*b)) (φ (v , w)))) | 611 FMap F (λ r → proj₁ r (proj₂ r)) (φ ( |
612 FMap F ( λ z → ( λ x → (proj₂ (proj₁ z)) (( proj₂ z ) x ))) ( φ ( φ ( unit , u) , v)) | |
613 , FMap F id w)) | |
614 ≡⟨ {!!} ⟩ | |
615 FMap F (λ r → proj₁ r (proj₂ r)) ( | |
616 FMap F ( map ( λ z → ( λ x → (proj₂ (proj₁ z)) (( proj₂ z ) x ))) id ) ( φ ( φ ( φ ( unit , u) , v) , w ))) | |
617 ≡⟨ {!!} ⟩ | |
618 FMap F ( λ y → (λ r → proj₁ r (proj₂ r)) ( | |
619 ( map ( λ z → ( λ x → (proj₂ (proj₁ z)) (( proj₂ z ) x ))) id ) y)) ( φ ( φ ( φ ( unit , u) , v) , w )) | |
620 ≡⟨⟩ | |
621 FMap F ( λ y → (( λ z → ( λ x → (proj₂ (proj₁ z)) (( proj₂ z ) x ))) (proj₁ y)) (proj₂ y) ) | |
622 ( φ ( φ ( φ ( unit , u) , v) , w )) | |
623 ≡⟨⟩ | |
624 FMap F ( λ x → (proj₂ (proj₁ (proj₁ x))) (( proj₂ (proj₁ x) ) (proj₂ x))) ( φ ( φ ( φ ( unit , u) , v) , w )) | |
625 ≡⟨ {!!} ⟩ | |
626 FMap F ( λ x → (proj₁ (proj₁ x)) (( proj₂ (proj₁ x) ) (proj₂ x))) ( φ ( φ ( u , v) , w )) | |
627 ≡⟨ {!!} ⟩ | |
628 {!!} | |
629 ≡⟨ ≡-cong ( λ k → (FMap F ( λ x → (proj₁ x) ((proj₁ (proj₂ x) )(proj₂ (proj₂ x)))) ) k ) ( sym ( IsHaskellMonoidalFunctor.assocφ mono ) ) ⟩ | |
630 FMap F ( λ x → (proj₁ x) ((proj₁ (proj₂ x) )(proj₂ (proj₂ x)))) ( φ ( u , (φ (v , w)))) | |
631 ≡⟨⟩ | |
632 FMap F ( λ x → (proj₁ x) ((λ r → proj₁ r (proj₂ r)) ( proj₂ x))) ( φ ( u , (φ (v , w)))) | |
633 ≡⟨ {!!} ⟩ | |
634 FMap F (λ r → proj₁ r (proj₂ r)) (FMap F (map id (λ r → proj₁ r (proj₂ r))) ( φ ( u , (φ (v , w))))) | |
635 ≡⟨ {!!} ⟩ | |
636 FMap F (λ r → proj₁ r (proj₂ r)) (φ (FMap F id u , FMap F (λ r → proj₁ r (proj₂ r)) (φ (v , w)))) | |
637 ≡⟨ {!!} ⟩ | |
638 FMap F (λ r → proj₁ r (proj₂ r)) (φ (u , FMap F (λ r → proj₁ r (proj₂ r)) (φ (v , w)))) | |
598 ∎ | 639 ∎ |
599 where | 640 where |
600 open Relation.Binary.PropositionalEquality.≡-Reasoning | 641 open Relation.Binary.PropositionalEquality.≡-Reasoning |
601 homomorphism : { a b : Obj Sets } { f : Hom Sets a b } { x : a } → pure f <*> pure x ≡ pure (f x) | 642 homomorphism : { a b : Obj Sets } { f : Hom Sets a b } { x : a } → pure f <*> pure x ≡ pure (f x) |
602 homomorphism = {!!} | 643 homomorphism = {!!} |