comparison CCChom.agda @ 812:4ff300e1e98c

graph to CCC done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 27 Apr 2019 08:42:36 +0900
parents 2de0358ea10a
children e4986625ddd7
comparison
equal deleted inserted replaced
811:2de0358ea10a 812:4ff300e1e98c
592 open import discrete 592 open import discrete
593 open graphtocat 593 open graphtocat
594 594
595 open Graph 595 open Graph
596 596
597 data Objs {G : Graph } : Set where 597 data Objs (G : Graph ) : Set where
598 atom : (vertex G) → Objs 598 atom : (vertex G) → Objs G
599 ⊤ : Objs 599 ⊤ : Objs G
600 _∧_ : Objs {G} → Objs {G} → Objs 600 _∧_ : Objs G → Objs G → Objs G
601 _<=_ : Objs {G} → Objs {G} → Objs 601 _<=_ : Objs G → Objs G → Objs G
602 602
603 data Arrow {G : Graph } : Objs {G} → Objs {G} → Set where 603 data Arrow (G : Graph ) : Objs G → Objs G → Set where
604 arrow : {a b : vertex G} → (edge G) a b → Arrow (atom a) (atom b) 604 arrow : {a b : vertex G} → (edge G) a b → Arrow G (atom a) (atom b)
605 ○ : (a : Objs ) → Arrow a ⊤ 605 ○ : (a : Objs G ) → Arrow G a ⊤
606 π : {a b : Objs } → Arrow ( a ∧ b ) a 606 π : {a b : Objs G } → Arrow G ( a ∧ b ) a
607 π' : {a b : Objs } → Arrow ( a ∧ b ) b 607 π' : {a b : Objs G } → Arrow G ( a ∧ b ) b
608 ε : {a b : Objs } → Arrow ((a <= b) ∧ b ) a 608 ε : {a b : Objs G } → Arrow G ((a <= b) ∧ b ) a
609 -- <_,_> : {a b c : Objs } → Arrow c a → Arrow c b → Arrow c (a ∧ b) 609 -- <_,_> : {a b c : Objs } → Arrow c a → Arrow c b → Arrow c (a ∧ b)
610 -- _* : {a b c : Objs } → Arrow (c ∧ b ) a → Arrow c ( a <= b ) 610 -- _* : {a b c : Objs } → Arrow (c ∧ b ) a → Arrow c ( a <= b )
611 611
612 record SM : Set (suc Level.zero) where 612 record SM : Set (suc Level.zero) where
613 field 613 field
617 617
618 open SM 618 open SM
619 619
620 -- positive intutionistic calculus 620 -- positive intutionistic calculus
621 PL : (G : SM) → Graph 621 PL : (G : SM) → Graph
622 PL G = record { vertex = Objs {graph G} ; edge = Arrow {graph G}} 622 PL G = record { vertex = Objs (graph G) ; edge = Arrow (graph G) }
623 DX : (G : SM) → Category Level.zero Level.zero Level.zero 623 DX : (G : SM) → Category Level.zero Level.zero Level.zero
624 DX G = GraphtoCat (PL G) 624 DX G = GraphtoCat (PL G)
625 625
626 -- open import Category.Sets 626 -- open import Category.Sets
627 -- postulate extensionality : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) → Relation.Binary.PropositionalEquality.Extensionality c₂ c₂ 627 -- postulate extensionality : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) → Relation.Binary.PropositionalEquality.Extensionality c₂ c₂
628 628
629 fobj : {G : SM} ( a : Obj (DX G) ) → Set 629 fobj : {G : SM} ( a : Objs (graph G) ) → Set
630 fobj {G} (atom x) = sobj G x 630 fobj {G} (atom x) = sobj G x
631 fobj {G} (a ∧ b) = (fobj {G} a ) /\ (fobj {G} b ) 631 fobj {G} (a ∧ b) = (fobj {G} a ) /\ (fobj {G} b )
632 fobj {G} (a <= b) = fobj {G} b → fobj {G} a 632 fobj {G} (a <= b) = fobj {G} b → fobj {G} a
633 fobj ⊤ = One' 633 fobj ⊤ = One'
634 fmap : {G : SM} { a b : Obj (DX G) } → Hom (DX G) a b → fobj {G} a → fobj {G} b 634 amap : {G : SM} { a b : Objs (graph G) } → Arrow (graph G) a b → fobj {G} a → fobj {G} b
635 amap {G} {.(atom _)} {.(atom _)} (arrow x) = smap G x
636 amap {G} {a} {.⊤} (○ a) _ = OneObj'
637 amap {G} {.(b ∧ _)} {b} π ( x , _) = x
638 amap {G} {.(_ ∧ b)} {b} π'( _ , x) = x
639 amap {G} {.((b <= _) ∧ _)} {b} ε ( f , x ) = f x
640 fmap : {G : SM} { a b : Objs (graph G) } → Hom (DX G) a b → fobj {G} a → fobj {G} b
635 fmap {G} {a} {a} (id a) = λ z → z 641 fmap {G} {a} {a} (id a) = λ z → z
636 fmap {G} {a} {(atom b)} (next {a} {c} (arrow x) f) = λ (z : fobj a) → smap G x ( fmap f z ) 642 fmap {G} {a} {b} (next x f ) = Sets [ amap {G} x o fmap f ]
637 fmap {G} {a} {⊤} (next (○ b) f) = λ _ → OneObj'
638 fmap {G} {a} {b} (next {a} {.b ∧ y} {b} π f) = λ z → proj₁ ( fmap {G} {a} {b ∧ y} f z )
639 fmap {G} {a} {b} (next {.a} {x ∧ .b} {.b} π' f) = λ z → proj₂ ( fmap f z ) where
640 fmap {G} {a} {b} (next {.a} {(x <= y) ∧ y} {.b} ε f) = λ z → ( proj₁ (fmap f z))( proj₂ (fmap f z))
641 643
642 CS : (G : SM ) → Functor (DX G) (Sets {Level.zero}) 644 CS : (G : SM ) → Functor (DX G) (Sets {Level.zero})
643 FObj (CS G) a = fobj a 645 FObj (CS G) a = fobj a
644 FMap (CS G) {a} {b} f = fmap {G} {a} {b} f 646 FMap (CS G) {a} {b} f = fmap {G} {a} {b} f
645 isFunctor (CS G) = isf where 647 isFunctor (CS G) = isf where
646 _++_ = Category._o_ (DX G) 648 _++_ = Category._o_ (DX G)
647 ++idR = IsCategory.identityR ( Category.isCategory ( DX G ) ) 649 ++idR = IsCategory.identityR ( Category.isCategory ( DX G ) )
648 distr : {a b c : Obj (DX G)} { f : Hom (DX G) a b } { g : Hom (DX G) b c } → (z : fobj {G} a ) → fmap (g ++ f) z ≡ fmap g (fmap f z) 650 distr : {a b c : Obj (DX G)} { f : Hom (DX G) a b } { g : Hom (DX G) b c } → (z : fobj {G} a ) → fmap (g ++ f) z ≡ fmap g (fmap f z)
651 distr {a} {b} {c} {f} {next {.b} {.c ∧ x} {.c} π g} z = begin
652 fmap (DX G [ next π g o f ]) z
653 ≡⟨⟩
654 fmap {G} {a} {c} (next {PL G} {a} {c ∧ x} {c} π ( g ++ f)) z
655 ≡⟨⟩
656 proj₁ ( fmap {G} {a} {c ∧ x} (g ++ f ) z )
657 ≡⟨ cong ( λ k → proj₁ k ) ( distr {a} {b} {(c ∧ x)} {f} {g} z ) ⟩
658 proj₁ ( fmap g ( fmap f z ))
659 ≡⟨⟩
660 (Sets [ fmap (next π g) o fmap f ]) z
661 ∎ where open ≡-Reasoning
662 distr {a} {b} {c} {f} {next {b} {x ∧ c} π' g} z = begin
663 fmap (DX G [ next π' g o f ]) z
664 ≡⟨⟩
665 fmap (next π' (g ++ f)) z
666 ≡⟨⟩
667 proj₂ (fmap (g ++ f) z)
668 ≡⟨ cong ( λ k → proj₂ k ) ( distr {a} {b} {x ∧ c} {f} {g} z ) ⟩
669 ( Sets [ fmap (next π' g) o fmap f ] ) z
670 ∎ where open ≡-Reasoning
671 distr {a} {b} {c} {f} {next {b} {(c <= x) ∧ x} {c} ε g} z = begin
672 fmap (DX G [ next ε g o f ] ) z
673 ≡⟨⟩
674 fmap (next ε (g ++ f)) z
675 ≡⟨⟩
676 proj₁ (fmap (g ++ f) z) ( proj₂ (fmap (g ++ f) z) )
677 ≡⟨ cong ( λ k → proj₁ k ( proj₂ k)) (distr {a} {b} {(c <= x) ∧ x} {f} {g} z) ⟩
678 proj₁ (fmap g (fmap f z)) ( proj₂ (fmap g (fmap f z)))
679 ≡⟨⟩
680 fmap (next ε g) (fmap f z)
681 ≡⟨⟩
682 ( Sets [ fmap (next ε g) o fmap f ] ) z
683 ∎ where open ≡-Reasoning
649 distr {a} {.a} {.a} {id a} {id .a} z = refl 684 distr {a} {.a} {.a} {id a} {id .a} z = refl
650 distr {a} {.a} {c} {id a} {next x g} z = begin 685 distr {a} {.a} {c} {id a} {next {a} {b} x g} z = begin
651 fmap (DX G [ next x g o Chain.id a ]) z 686 fmap (DX G [ next x g o Chain.id a ]) z
652 ≡⟨⟩ 687 ≡⟨⟩
653 fmap ( next x ( g ++ (Chain.id a))) z 688 fmap ( next x ( g ++ (Chain.id a))) z
654 ≡⟨ cong ( λ k → fmap ( next x k ) z ) ++idR ⟩ 689 ≡⟨ cong ( λ k → fmap ( next x k ) z ) ( ++idR {a} {b} {g} ) ⟩
655 fmap ( next x g ) z 690 fmap ( next x g ) z
656 ≡⟨ refl ⟩ 691 ≡⟨ refl ⟩
657 ( Sets [ fmap (next x g) o fmap (Chain.id a) ] ) z 692 ( Sets [ fmap (next x g) o fmap (Chain.id a) ] ) z
658 ∎ where open ≡-Reasoning 693 ∎ where open ≡-Reasoning
659 distr {a} {b} {b} {f} {id b} z = refl 694 distr {a} {b} {b} {f} {id b} z = refl
673 distr {a} {b} {.⊤} {f} {next (○ a₁) g} z = begin 708 distr {a} {b} {.⊤} {f} {next (○ a₁) g} z = begin
674 fmap (DX G [ next (○ a₁) g o f ]) z 709 fmap (DX G [ next (○ a₁) g o f ]) z
675 ≡⟨⟩ 710 ≡⟨⟩
676 (Sets [ fmap (next (○ a₁) g) o fmap f ]) z 711 (Sets [ fmap (next (○ a₁) g) o fmap f ]) z
677 ∎ where open ≡-Reasoning 712 ∎ where open ≡-Reasoning
678 distr {a} {b} {c} {f} {next {.b} {.c ∧ x} {.c} π g} z = begin
679 fmap (DX G [ next π g o f ]) z
680 ≡⟨⟩
681 fmap {G} {a} {c} (next {PL G} {a} {c ∧ x} {c} π ( g ++ f)) z
682 ≡⟨ {!!} ⟩
683 proj₁ ( fmap {G} {a} {c ∧ x} (g ++ f ) z )
684 ≡⟨ cong ( λ k → proj₁ k ) ( distr {a} {b} {(c ∧ x)} {f} {g} z ) ⟩
685 proj₁ ( fmap g ( fmap f z ))
686 ≡⟨ {!!} ⟩
687 (Sets [ fmap (next π g) o fmap f ]) z
688 ∎ where open ≡-Reasoning
689 distr {a} {b} {c} {f} {next π' g} z = begin
690 fmap (DX G [ next π' g o f ]) z
691 ≡⟨⟩
692 fmap (next π' (g ++ f)) z
693 ≡⟨ {!!} ⟩
694 proj₂ (fmap (g ++ f) z)
695 ≡⟨ {!!} ⟩
696 ( Sets [ fmap (next π' g) o fmap f ] ) z
697 ∎ where open ≡-Reasoning
698 distr {a} {b} {c} {f} {next {b} {(c <= x) ∧ x} {c} ε g} z = begin
699 fmap (DX G [ next ε g o f ] ) z
700 ≡⟨⟩
701 fmap (next ε (g ++ f)) z
702 ≡⟨ {!!} ⟩
703 proj₁ (fmap (g ++ f) z) ( proj₂ (fmap (g ++ f) z) )
704 ≡⟨ cong ( λ k → proj₁ k ( proj₂ k)) (distr {a} {b} {(c <= x) ∧ x} {f} {g} z) ⟩
705 proj₁ (fmap g (fmap f z)) ( proj₂ (fmap g (fmap f z)))
706 ≡⟨ {!!} ⟩
707 fmap (next ε g) (fmap f z)
708 ≡⟨⟩
709 ( Sets [ fmap (next ε g) o fmap f ] ) z
710 ∎ where open ≡-Reasoning
711 isf : IsFunctor (DX G) Sets fobj fmap 713 isf : IsFunctor (DX G) Sets fobj fmap
712 IsFunctor.identity isf = extensionality Sets ( λ x → refl ) 714 IsFunctor.identity isf = extensionality Sets ( λ x → refl )
713 IsFunctor.≈-cong isf refl = refl 715 IsFunctor.≈-cong isf refl = refl
714 IsFunctor.distr isf {a} {b} {c} {g} {f} = extensionality Sets ( λ z → distr {a} {b} {c} {g} {f} z ) 716 IsFunctor.distr isf {a} {b} {c} {g} {f} = extensionality Sets ( λ z → distr {a} {b} {c} {g} {f} z )
715 717
716 <_,_> : { G : SM } → {a b c : Objs {graph G}} → Arrow c a → Arrow c b → Hom Sets (FObj (CS G) c ) (FObj (CS G) (a ∧ b) ) 718 <_,_> : { G : SM } → {a b c : Objs (graph G)} → Arrow (graph G) c a → Arrow (graph G) c b → Hom Sets (FObj (CS G) c ) (FObj (CS G) (a ∧ b) )
717 <_,_> {G} {a} {b} {c} f g = λ z → ( (FMap (CS G) ( next f (id c))) z , FMap (CS G) (next g (id c)) z ) 719 <_,_> {G} {a} {b} {c} f g = λ z → ( (FMap (CS G) ( next f (id c))) z , FMap (CS G) (next g (id c)) z )
718 720
719 _* : { G : SM } → {a b c : Objs {graph G}} → Arrow (c ∧ b ) a → Hom Sets (FObj (CS G) c) (FObj (CS G) ( a <= b )) 721 _* : { G : SM } → {a b c : Objs (graph G)} → Arrow (graph G) (c ∧ b ) a → Hom Sets (FObj (CS G) c) (FObj (CS G) ( a <= b ))
720 _* {G} {a} {b} {c} f = λ z y → FMap (CS G) ( next f (id (c ∧ b) ) ) ( z , y ) 722 _* {G} {a} {b} {c} f = λ z y → FMap (CS G) ( next f (id (c ∧ b) ) ) ( z , y )