annotate deductive.agda @ 798:6e6c7ad8ea1c

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 23 Apr 2019 06:39:24 +0900
parents f37f11e1b871
children 82a8c1ab4ef5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
792
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
1 open import Level
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
2 open import Category
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
3 module deductive {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) where
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 -- Deduction Theorem
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
792
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
7 -- positive logic
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
792
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
9 record PositiveLogic {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) : Set ( c₁ ⊔ c₂ ⊔ ℓ ) where
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
10 field
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
11 ⊤ : Obj A
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
12 ○ : (a : Obj A ) → Hom A a ⊤
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
13 _∧_ : Obj A → Obj A → Obj A
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
14 <_,_> : {a b c : Obj A } → Hom A c a → Hom A c b → Hom A c (a ∧ b)
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
15 π : {a b : Obj A } → Hom A (a ∧ b) a
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
16 π' : {a b : Obj A } → Hom A (a ∧ b) b
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
17 _<=_ : (a b : Obj A ) → Obj A
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
18 _* : {a b c : Obj A } → Hom A (a ∧ b) c → Hom A a (c <= b)
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
19 ε : {a b : Obj A } → Hom A ((a <= b ) ∧ b) a
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
20
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
21 module ccc-from-graph ( Atom : Set ) ( Hom : Atom → Atom → Set ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
23 open import Relation.Binary.PropositionalEquality renaming ( cong to ≡-cong )
792
5bee48f7c126 deduction theorem using category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 791
diff changeset
24
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
25 data Objs : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
26 ⊤ : Objs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
27 atom : Atom → Objs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
28 _∧_ : Objs → Objs → Objs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
29 _<=_ : Objs → Objs → Objs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
31 data Arrow : Objs → Objs → Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
32 hom : (a b : Atom) → Hom a b → Arrow (atom a) (atom b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
33 id : (a : Objs ) → Arrow a a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
34 _・_ : {a b c : Objs } → Arrow b c → Arrow a b → Arrow a c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
35 ○ : (a : Objs ) → Arrow a ⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
36 π : {a b : Objs } → Arrow ( a ∧ b ) a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
37 π' : {a b : Objs } → Arrow ( a ∧ b ) b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
38 <_,_> : {a b c : Objs } → Arrow c a → Arrow c b → Arrow c (a ∧ b)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
39 ε : {a b : Objs } → Arrow ((a <= b) ∧ b ) a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
40 _* : {a b c : Objs } → Arrow (c ∧ b ) a → Arrow c ( a <= b )
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
42 record GraphCat : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
43 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
44 identityL : {a b : Objs} {f : Arrow a b } → (id b ・ f) ≡ f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
45 identityR : {a b : Objs} {f : Arrow a b } → (f ・ id a) ≡ f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
46 resp : {a b c : Objs} {f g : Arrow a b } {h i : Arrow b c } → f ≡ g → h ≡ i → (h ・ f) ≡ (i ・ g)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
47 associative : {a b c d : Objs} {f : Arrow c d }{g : Arrow b c }{h : Arrow a b } → (f ・ (g ・ h)) ≡ ((f ・ g) ・ h)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
48
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
50 GLCat : GraphCat → Category Level.zero Level.zero Level.zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
51 GLCat gc = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
52 Obj = Objs ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
53 Hom = λ a b → Arrow a b ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
54 _o_ = _・_ ; -- λ{a} {b} {c} x y → ; -- _×_ {c₁ } { c₂} {a} {b} {c} x y ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
55 _≈_ = λ x y → x ≡ y ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
56 Id = λ{a} → id a ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
57 isCategory = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
58 isEquivalence = record {refl = refl ; trans = trans ; sym = sym }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
59 ; identityL = λ{a b f} → GraphCat.identityL gc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
60 ; identityR = λ{a b f} → GraphCat.identityR gc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
61 ; o-resp-≈ = λ {a b c f g h i} f=g h=i → GraphCat.resp gc f=g h=i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
62 ; associative = λ{a b c d f g h } → GraphCat.associative gc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
63 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
64 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
66 GL : (gc : GraphCat ) → PositiveLogic (GLCat gc )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
67 GL _ = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
68 ⊤ = ⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
69 ; ○ = ○
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
70 ; _∧_ = _∧_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
71 ; <_,_> = <_,_>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
72 ; π = π
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
73 ; π' = π'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
74 ; _<=_ = _<=_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
75 ; _* = _*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
76 ; ε = ε
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
77 }
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
79 module deduction-theorem ( L : PositiveLogic A ) where
791
376c07159acf deduction theorem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
798
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
81 open PositiveLogic L
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
82 _・_ = _[_o_] A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
83
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
84 -- every proof b → c with assumption a has following forms
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
86 data φ {a : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁ ⊔ c₂ ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
87 i : {b c : Obj A} {k : Hom A b c } → φ x k
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
88 ii : φ x {⊤} {a} x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
89 iii : {b c' c'' : Obj A } { f : Hom A b c' } { g : Hom A b c'' } (ψ : φ x f ) (χ : φ x g ) → φ x {b} {c' ∧ c''} < f , g >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
90 iv : {b c d : Obj A } { f : Hom A d c } { g : Hom A b d } (ψ : φ x f ) (χ : φ x g ) → φ x ( f ・ g )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
91 v : {b c' c'' : Obj A } { f : Hom A (b ∧ c') c'' } (ψ : φ x f ) → φ x {b} {c'' <= c'} ( f * )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
93 α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
94 α = < π ・ π , < π' ・ π , π' > >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
96 -- genetate (a ∧ b) → c proof from proof b → c with assumption a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
98 kx∈a : {a b c : Obj A } → ( x : Hom A ⊤ a ) → {z : Hom A b c } → ( y : φ {a} x z ) → Hom A (a ∧ b) c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
99 kx∈a x {k} i = k ・ π'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
100 kx∈a x ii = π
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
101 kx∈a x (iii ψ χ ) = < kx∈a x ψ , kx∈a x χ >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
102 kx∈a x (iv ψ χ ) = kx∈a x ψ ・ < π , kx∈a x χ >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 793
diff changeset
103 kx∈a x (v ψ ) = ( kx∈a x ψ ・ α ) *