comparison src/Polynominal.agda @ 1098:0484477868fe

explict x in Poly is bad in Internal Language
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 29 Aug 2021 13:44:54 +0900
parents f6d976d26c5a
children
comparison
equal deleted inserted replaced
1097:321f0fef54c2 1098:0484477868fe
32 -- 32 --
33 -- this makes a few changes, but we don't care. 33 -- this makes a few changes, but we don't care.
34 -- from page. 51 34 -- from page. 51
35 -- 35 --
36 36
37 open Functor
38 open import Relation.Binary.PropositionalEquality hiding ( [_] ; resp ) renaming ( sym to ≡sym )
39
40
37 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) 41 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
42
43 data _H≈_ {a b c d : Obj A } ( x : Hom A a b ) (y : Hom A c d ) : Set ( c₁ ⊔ c₂ ⊔ ℓ) where
44 feq : a ≡ c → b ≡ d → (z : Hom A a b) → z ≅ y → A [ x ≈ z ] → x H≈ y
45
46 record SA {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : Set ( suc c₁ ⊔ suc c₂ ⊔ suc ℓ) where
47 field
48 F : Functor A A
49 without-x : {b c : Obj A} → (f : Hom A b c) → ¬ ( FMap F f H≈ x )
38 50
39 data φ {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁ ⊔ c₂ ⊔ ℓ) where 51 data φ {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁ ⊔ c₂ ⊔ ℓ) where
40 i : {b c : Obj A} (k : Hom A b c ) → φ x k 52 i : {b c : Obj A} (k : Hom A b c ) → φ x k
41 ii : φ x {⊤} {a} x 53 ii : φ x {⊤} {a} x
42 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 > 54 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 >
65 -- the smallest equivalence relation 77 -- the smallest equivalence relation
66 -- 78 --
67 -- if we use equality on f as in A, Poly is ovioously Hom c b of a Category. 79 -- if we use equality on f as in A, Poly is ovioously Hom c b of a Category.
68 -- it is better to define A[x] as an extension of A as described before 80 -- it is better to define A[x] as an extension of A as described before
69 81
70 record Poly (a c b : Obj A ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where 82 record Poly {a} (x : Hom A 1 a) (c b : Obj A ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
71 field 83 field
72 x : Hom A 1 a
73 f : Hom A b c 84 f : Hom A b c
74 phi : φ x {b} {c} f 85 phi : φ x {b} {c} f
75 86
76 -- an assuption needed in k x phi ≈ k x phi' 87 -- an assuption needed in k x phi ≈ k x phi'
77 -- k x (i x) ≈ k x ii 88 -- k x (i x) ≈ k x ii
81 -- this is justified equality f ≈ g in A[x] is used in f ∙ < x , id1 A _> ≈ f ∙ < x , id1 A _> 92 -- this is justified equality f ≈ g in A[x] is used in f ∙ < x , id1 A _> ≈ f ∙ < x , id1 A _>
82 -- ( x ∙ π' ) ∙ < x , id1 A _ > ≈ π ∙ < x , id1 A _ > 93 -- ( x ∙ π' ) ∙ < x , id1 A _ > ≈ π ∙ < x , id1 A _ >
83 94
84 -- since we have A[x] now, we can proceed the proof on p.64 in some possible future 95 -- since we have A[x] now, we can proceed the proof on p.64 in some possible future
85 96
97 Ax : {a ⊤ : Obj A } ( x : Hom A 1 a ) → SA x → Functor A A
98 Ax {a} {⊤} x sa = record {
99 FObj = λ a → FObj (SA.F sa) a
100 ; FMap = λ {c} {d} f → {!!}
101 ; isFunctor = {!!}
102 }
103
86 -- 104 --
87 -- Proposition 6.1 105 -- Proposition 6.1
88 -- 106 --
89 -- For every polynominal ψ(x) : b → c in an indeterminate x : 1 → a over a cartesian or cartesian closed 107 -- For every polynominal ψ(x) : b → c in an indeterminate x : 1 → a over a cartesian or cartesian closed
90 -- category A there is a unique arrow f : a ∧ b → c in A such that f ∙ < x ∙ ○ b , id1 A b > ≈ ψ(x). 108 -- category A there is a unique arrow f : a ∧ b → c in A such that f ∙ < x ∙ ○ b , id1 A b > ≈ ψ(x).
91 109
92 record Functional-completeness {a b c : Obj A} ( p : Poly a c b ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where 110 record Functional-completeness {a b c : Obj A} (x : Hom A 1 a ) ( p : Poly x c b ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
93 x = Poly.x p
94 field 111 field
95 fun : Hom A (a ∧ b) c 112 fun : Hom A (a ∧ b) c
96 fp : A [ fun ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ] 113 fp : A [ fun ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ]
97 uniq : ( f : Hom A (a ∧ b) c) → A [ f ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ] 114 uniq : ( f : Hom A (a ∧ b) c) → A [ f ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p ]
98 → A [ f ≈ fun ] 115 → A [ f ≈ fun ]
99 116
100 -- ε form 117 -- ε form
101 -- f ≡ λ (x ∈ a) → φ x , ∃ (f : b <= a) → f ∙ x ≈ φ x 118 -- f ≡ λ (x ∈ a) → φ x , ∃ (f : b <= a) → f ∙ x ≈ φ x
102 record Fc {a b : Obj A } ( φ : Poly a b 1 ) 119 record Fc {a b : Obj A } (x : Hom A 1 a ) ( φ : Poly x b 1 )
103 : Set ( suc c₁ ⊔ suc c₂ ⊔ suc ℓ ) where 120 : Set ( suc c₁ ⊔ suc c₂ ⊔ suc ℓ ) where
104 field 121 field
105 sl : Hom A a b 122 sl : Hom A a b
106 g : Hom A 1 (b <= a) 123 g : Hom A 1 (b <= a)
107 g = ( sl ∙ π' ) * 124 g = ( sl ∙ π' ) *
108 field 125 field
109 isSelect : A [ ε ∙ < g , Poly.x φ > ≈ Poly.f φ ] 126 isSelect : A [ ε ∙ < g , x > ≈ Poly.f φ ]
110 isUnique : (f : Hom A 1 (b <= a) ) → A [ ε ∙ < f , Poly.x φ > ≈ Poly.f φ ] 127 isUnique : (f : Hom A 1 (b <= a) ) → A [ ε ∙ < f , x > ≈ Poly.f φ ]
111 → A [ g ≈ f ] 128 → A [ g ≈ f ]
112 129
113 -- we should open IsCCC isCCC 130 -- we should open IsCCC isCCC
114 π-cong = IsCCC.π-cong isCCC 131 π-cong = IsCCC.π-cong isCCC
115 *-cong = IsCCC.*-cong isCCC 132 *-cong = IsCCC.*-cong isCCC
142 ( f ∙ < π' ∙ π , π' > ) * ≈↑⟨ *-cong (cdr (IsCCC.e3b isCCC)) ⟩ 159 ( f ∙ < π' ∙ π , π' > ) * ≈↑⟨ *-cong (cdr (IsCCC.e3b isCCC)) ⟩
143 ( f ∙ ( π' ∙ < π ∙ π , < π' ∙ π , π' > > ) ) * ≈⟨ *-cong assoc ⟩ 160 ( f ∙ ( π' ∙ < π ∙ π , < π' ∙ π , π' > > ) ) * ≈⟨ *-cong assoc ⟩
144 ( (f ∙ π') ∙ < π ∙ π , < π' ∙ π , π' > > ) * ≈⟨ *-cong ( car ( ki x _ fp )) ⟩ 161 ( (f ∙ π') ∙ < π ∙ π , < π' ∙ π , π' > > ) * ≈⟨ *-cong ( car ( ki x _ fp )) ⟩
145 ( k x fp ∙ < π ∙ π , < π' ∙ π , π' > > ) * ≈⟨⟩ 162 ( k x fp ∙ < π ∙ π , < π' ∙ π , π' > > ) * ≈⟨⟩
146 k x (v fp ) ∎ 163 k x (v fp ) ∎
147 k-cong : {a b c : Obj A} → (f g : Poly a c b ) 164 k-cong : {a b c : Obj A} → (x : Hom A 1 a ) → (f g : Poly x c b )
148 → A [ Poly.f f ≈ Poly.f g ] → A [ k (Poly.x f) (Poly.phi f) ≈ k (Poly.x g) (Poly.phi g) ] 165 → A [ Poly.f f ≈ Poly.f g ] → A [ k x (Poly.phi f) ≈ k x (Poly.phi g) ]
149 k-cong {a} {b} {c} f g f=f = begin 166 k-cong {a} {b} {c} x f g f=f = begin
150 k (Poly.x f) (Poly.phi f) ≈↑⟨ ki (Poly.x f) (Poly.f f) (Poly.phi f) ⟩ 167 k x (Poly.phi f) ≈↑⟨ ki x (Poly.f f) (Poly.phi f) ⟩
151 Poly.f f ∙ π' ≈⟨ car f=f ⟩ 168 Poly.f f ∙ π' ≈⟨ car f=f ⟩
152 Poly.f g ∙ π' ≈⟨ ki (Poly.x g) (Poly.f g) (Poly.phi g) ⟩ 169 Poly.f g ∙ π' ≈⟨ ki x (Poly.f g) (Poly.phi g) ⟩
153 k (Poly.x g) (Poly.phi g) ∎ 170 k x (Poly.phi g) ∎
154 171
155 -- proof in p.59 Lambek 172 -- proof in p.59 Lambek
156 -- 173 --
157 -- (ψ : Poly a c b) is basically λ x.ψ(x). To use x from outside as a ψ(x), apply x ψ will work. 174 -- (ψ : Poly a c b) is basically λ x.ψ(x). To use x from outside as a ψ(x), apply x ψ will work.
158 -- Instead of replacing x in Poly.phi ψ, we can use simple application with this fuctional completeness 175 -- Instead of replacing x in Poly.phi ψ, we can use simple application with this fuctional completeness
159 -- in the internal language of Topos. 176 -- in the internal language of Topos.
160 -- 177 --
161 functional-completeness : {a b c : Obj A} ( p : Poly a c b ) → Functional-completeness p 178 functional-completeness : {a b c : Obj A} (x : Hom A 1 a ) ( p : Poly x c b ) → Functional-completeness x p
162 functional-completeness {a} {b} {c} p = record { 179 functional-completeness {a} {b} {c} x p = record {
163 fun = k (Poly.x p) (Poly.phi p) 180 fun = k x (Poly.phi p)
164 ; fp = fc0 (Poly.x p) (Poly.f p) (Poly.phi p) 181 ; fp = fc0 x (Poly.f p) (Poly.phi p)
165 ; uniq = λ f eq → uniq (Poly.x p) (Poly.f p) (Poly.phi p) f eq 182 ; uniq = λ f eq → uniq x (Poly.f p) (Poly.phi p) f eq
166 } where 183 } where
167 fc0 : {a b c : Obj A} → (x : Hom A 1 a) (f : Hom A b c) (phi : φ x {b} {c} f ) 184 fc0 : {a b c : Obj A} → (x : Hom A 1 a) (f : Hom A b c) (phi : φ x {b} {c} f )
168 → A [ k x phi ∙ < x ∙ ○ b , id1 A b > ≈ f ] 185 → A [ k x phi ∙ < x ∙ ○ b , id1 A b > ≈ f ]
169 fc0 {a} {b} {c} x f' phi with phi 186 fc0 {a} {b} {c} x f' phi with phi
170 ... | i {_} {_} s = begin 187 ... | i {_} {_} s = begin
243 -- a -> d <= b <-> (a ∧ b ) -> d 260 -- a -> d <= b <-> (a ∧ b ) -> d
244 -- 261 --
245 -- fun ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p 262 -- fun ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p
246 -- (ε ∙ < g ∙ π , π' >) ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p 263 -- (ε ∙ < g ∙ π , π' >) ∙ < x ∙ ○ b , id1 A b > ≈ Poly.f p
247 -- could be simpler 264 -- could be simpler
248 FC : {a b : Obj A} → (φ : Poly a b 1 ) → Fc {a} {b} φ 265 FC : {a b : Obj A} → (x : Hom A 1 a ) → (φ : Poly x b 1 ) → Fc {a} {b} x φ
249 FC {a} {b} φ = record { 266 FC {a} {b} x φ = record {
250 sl = k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > 267 sl = k x (Poly.phi φ) ∙ < id1 A _ , ○ a >
251 ; isSelect = isSelect 268 ; isSelect = isSelect
252 ; isUnique = uniq 269 ; isUnique = uniq
253 } where 270 } where
254 π-exchg = IsCCC.π-exchg isCCC 271 π-exchg = IsCCC.π-exchg isCCC
255 fc0 : {b c : Obj A} (p : Poly b c 1) → A [ k (Poly.x p ) (Poly.phi p) ∙ < Poly.x p ∙ ○ 1 , id1 A 1 > ≈ Poly.f p ] 272 fc0 : {b c : Obj A} (p : Poly x c 1) → A [ k x (Poly.phi p) ∙ < x ∙ ○ 1 , id1 A 1 > ≈ Poly.f p ]
256 fc0 p = Functional-completeness.fp (functional-completeness p) 273 fc0 p = Functional-completeness.fp (functional-completeness x p)
257 gg : A [ ( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ Poly.x φ ≈ Poly.f φ ] 274 gg : A [ ( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ x ≈ Poly.f φ ]
258 gg = begin 275 gg = begin
259 ( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ Poly.x φ ≈⟨ trans-hom (sym assoc) (cdr (IsCCC.distr-π isCCC ) ) ⟩ 276 ( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ x ≈⟨ trans-hom (sym assoc) (cdr (IsCCC.distr-π isCCC ) ) ⟩
260 k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ ∙ Poly.x φ , ○ a ∙ Poly.x φ > ≈⟨ cdr (π-cong idL e2 ) ⟩ 277 k x (Poly.phi φ) ∙ < id1 A _ ∙ x , ○ a ∙ x > ≈⟨ cdr (π-cong idL e2 ) ⟩
261 k (Poly.x φ ) (Poly.phi φ) ∙ < Poly.x φ , ○ 1 > ≈⟨ cdr (π-cong (trans-hom (sym idR) (cdr e2) ) (sym e2) ) ⟩ 278 k x (Poly.phi φ) ∙ < x , ○ 1 > ≈⟨ cdr (π-cong (trans-hom (sym idR) (cdr e2) ) (sym e2) ) ⟩
262 k (Poly.x φ ) (Poly.phi φ) ∙ < Poly.x φ ∙ ○ 1 , id1 A 1 > ≈⟨ fc0 φ ⟩ 279 k x (Poly.phi φ) ∙ < x ∙ ○ 1 , id1 A 1 > ≈⟨ fc0 φ ⟩
263 Poly.f φ ∎ 280 Poly.f φ ∎
264 isSelect : A [ ε ∙ < ( ( k (Poly.x φ ) ( Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ π' ) * , Poly.x φ > ≈ Poly.f φ ] 281 isSelect : A [ ε ∙ < ( ( k x ( Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ π' ) * , x > ≈ Poly.f φ ]
265 isSelect = begin 282 isSelect = begin
266 ε ∙ < ((k (Poly.x φ) (Poly.phi φ)∙ < id1 A _ , ○ a > ) ∙ π') * , Poly.x φ > ≈↑⟨ cdr (π-cong idR refl-hom ) ⟩ 283 ε ∙ < ((k (x) (Poly.phi φ)∙ < id1 A _ , ○ a > ) ∙ π') * , x > ≈↑⟨ cdr (π-cong idR refl-hom ) ⟩
267 ε ∙ (< ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ id1 A _ , Poly.x φ > ) ≈⟨ cdr (π-cong (cdr e2) refl-hom ) ⟩ 284 ε ∙ (< ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ id1 A _ , x > ) ≈⟨ cdr (π-cong (cdr e2) refl-hom ) ⟩
268 ε ∙ (< ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ 1 , Poly.x φ > ) ≈↑⟨ cdr (π-cong (cdr e2) refl-hom ) ⟩ 285 ε ∙ (< ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ 1 , x > ) ≈↑⟨ cdr (π-cong (cdr e2) refl-hom ) ⟩
269 ε ∙ (< ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ (○ a ∙ Poly.x φ) , Poly.x φ > ) ≈↑⟨ cdr (π-cong (sym assoc) idL ) ⟩ 286 ε ∙ (< ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ (○ a ∙ x) , x > ) ≈↑⟨ cdr (π-cong (sym assoc) idL ) ⟩
270 ε ∙ (< (((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ a ) ∙ Poly.x φ , id1 A _ ∙ Poly.x φ > ) 287 ε ∙ (< (((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ a ) ∙ x , id1 A _ ∙ x > )
271 ≈↑⟨ cdr (IsCCC.distr-π isCCC) ⟩ 288 ≈↑⟨ cdr (IsCCC.distr-π isCCC) ⟩
272 ε ∙ ((< (((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ a ) , id1 A _ > ) ∙ Poly.x φ ) 289 ε ∙ ((< (((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ ○ a ) , id1 A _ > ) ∙ x )
273 ≈↑⟨ cdr (car (π-cong (cdr (IsCCC.e3a isCCC) ) refl-hom)) ⟩ 290 ≈↑⟨ cdr (car (π-cong (cdr (IsCCC.e3a isCCC) ) refl-hom)) ⟩
274 ε ∙ ((< (((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ (π ∙ < ○ a , id1 A _ > )) , id1 A _ > ) ∙ Poly.x φ ) 291 ε ∙ ((< (((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ (π ∙ < ○ a , id1 A _ > )) , id1 A _ > ) ∙ x )
275 ≈⟨ cdr (car (π-cong assoc (sym (IsCCC.e3b isCCC)) )) ⟩ 292 ≈⟨ cdr (car (π-cong assoc (sym (IsCCC.e3b isCCC)) )) ⟩
276 ε ∙ ((< ((((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π ) ∙ < ○ a , id1 A _ > ) , (π' ∙ < ○ a , id1 A _ > ) > ) ∙ Poly.x φ ) 293 ε ∙ ((< ((((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π ) ∙ < ○ a , id1 A _ > ) , (π' ∙ < ○ a , id1 A _ > ) > ) ∙ x )
277 ≈↑⟨ cdr (car (IsCCC.distr-π isCCC)) ⟩ 294 ≈↑⟨ cdr (car (IsCCC.distr-π isCCC)) ⟩
278 ε ∙ ((< ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ∙ < ○ a , id1 A _ > ) ∙ Poly.x φ ) ≈⟨ assoc ⟩ 295 ε ∙ ((< ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ∙ < ○ a , id1 A _ > ) ∙ x ) ≈⟨ assoc ⟩
279 (ε ∙ (< ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ∙ < ○ a , id1 A _ > ) ) ∙ Poly.x φ ≈⟨ car assoc ⟩ 296 (ε ∙ (< ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ∙ < ○ a , id1 A _ > ) ) ∙ x ≈⟨ car assoc ⟩
280 ((ε ∙ < ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ) ∙ < ○ a , id1 A _ > ) ∙ Poly.x φ 297 ((ε ∙ < ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) * ) ∙ π , π' > ) ∙ < ○ a , id1 A _ > ) ∙ x
281 ≈⟨ car (car (IsCCC.e4a isCCC)) ⟩ 298 ≈⟨ car (car (IsCCC.e4a isCCC)) ⟩
282 ((( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) ∙ < ○ a , id1 A _ > ) ∙ Poly.x φ ≈↑⟨ car assoc ⟩ 299 ((( k x (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ) ∙ < ○ a , id1 A _ > ) ∙ x ≈↑⟨ car assoc ⟩
283 (( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ (π' ∙ < ○ a , id1 A _ > ) ) ∙ Poly.x φ ≈⟨ car (cdr (IsCCC.e3b isCCC)) ⟩ 300 (( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ (π' ∙ < ○ a , id1 A _ > ) ) ∙ x ≈⟨ car (cdr (IsCCC.e3b isCCC)) ⟩
284 (( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ id1 A _ ) ∙ Poly.x φ ≈⟨ car idR ⟩ 301 (( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ id1 A _ ) ∙ x ≈⟨ car idR ⟩
285 ( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ Poly.x φ ≈⟨ gg ⟩ 302 ( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ x ≈⟨ gg ⟩
286 Poly.f φ ∎ 303 Poly.f φ ∎
287 uniq : (f : Hom A 1 (b <= a)) → A [ ε ∙ < f , Poly.x φ > ≈ Poly.f φ ] → 304 uniq : (f : Hom A 1 (b <= a)) → A [ ε ∙ < f , x > ≈ Poly.f φ ] →
288 A [ (( k (Poly.x φ) (Poly.phi φ) ∙ < id1 A _ , ○ a > )∙ π' ) * ≈ f ] 305 A [ (( k (x) (Poly.phi φ) ∙ < id1 A _ , ○ a > )∙ π' ) * ≈ f ]
289 uniq f eq = begin 306 uniq f eq = begin
290 (( k (Poly.x φ ) (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ π' ) * ≈⟨ IsCCC.*-cong isCCC ( begin 307 (( k x (Poly.phi φ) ∙ < id1 A _ , ○ a > ) ∙ π' ) * ≈⟨ IsCCC.*-cong isCCC ( begin
291 (k (Poly.x φ) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ≈↑⟨ assoc ⟩ 308 (k (x) (Poly.phi φ) ∙ < id1 A _ , ○ a >) ∙ π' ≈↑⟨ assoc ⟩
292 k (Poly.x φ) (Poly.phi φ) ∙ (< id1 A _ , ○ a > ∙ π') ≈⟨ car ( sym (Functional-completeness.uniq (functional-completeness φ) _ ( begin 309 k (x) (Poly.phi φ) ∙ (< id1 A _ , ○ a > ∙ π') ≈⟨ car ( sym (Functional-completeness.uniq (functional-completeness x φ) _ ( begin
293 ((ε ∙ < f ∙ π , π' >) ∙ < π' , π >) ∙ < Poly.x φ ∙ ○ 1 , id1 A 1 > ≈↑⟨ assoc ⟩ 310 ((ε ∙ < f ∙ π , π' >) ∙ < π' , π >) ∙ < x ∙ ○ 1 , id1 A 1 > ≈↑⟨ assoc ⟩
294 (ε ∙ < f ∙ π , π' >) ∙ ( < π' , π > ∙ < Poly.x φ ∙ ○ 1 , id1 A 1 > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩ 311 (ε ∙ < f ∙ π , π' >) ∙ ( < π' , π > ∙ < x ∙ ○ 1 , id1 A 1 > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
295 (ε ∙ < f ∙ π , π' >) ∙ < π' ∙ < Poly.x φ ∙ ○ 1 , id1 A 1 > , π ∙ < Poly.x φ ∙ ○ 1 , id1 A 1 > > 312 (ε ∙ < f ∙ π , π' >) ∙ < π' ∙ < x ∙ ○ 1 , id1 A 1 > , π ∙ < x ∙ ○ 1 , id1 A 1 > >
296 ≈⟨ cdr (π-cong (IsCCC.e3b isCCC) (IsCCC.e3a isCCC)) ⟩ 313 ≈⟨ cdr (π-cong (IsCCC.e3b isCCC) (IsCCC.e3a isCCC)) ⟩
297 (ε ∙ < f ∙ π , π' >) ∙ < id1 A 1 , Poly.x φ ∙ ○ 1 > ≈↑⟨ assoc ⟩ 314 (ε ∙ < f ∙ π , π' >) ∙ < id1 A 1 , x ∙ ○ 1 > ≈↑⟨ assoc ⟩
298 ε ∙ ( < f ∙ π , π' > ∙ < id1 A 1 , Poly.x φ ∙ ○ 1 > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩ 315 ε ∙ ( < f ∙ π , π' > ∙ < id1 A 1 , x ∙ ○ 1 > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
299 ε ∙ ( < (f ∙ π ) ∙ < id1 A 1 , Poly.x φ ∙ ○ 1 > , π' ∙ < id1 A 1 , Poly.x φ ∙ ○ 1 > > ) ≈⟨ cdr (π-cong (sym assoc) (IsCCC.e3b isCCC)) ⟩ 316 ε ∙ ( < (f ∙ π ) ∙ < id1 A 1 , x ∙ ○ 1 > , π' ∙ < id1 A 1 , x ∙ ○ 1 > > ) ≈⟨ cdr (π-cong (sym assoc) (IsCCC.e3b isCCC)) ⟩
300 ε ∙ ( < f ∙ (π ∙ < id1 A 1 , Poly.x φ ∙ ○ 1 > ) , Poly.x φ ∙ ○ 1 > ) ≈⟨ cdr (π-cong (cdr (IsCCC.e3a isCCC)) (cdr (trans-hom e2 (sym e2)))) ⟩ 317 ε ∙ ( < f ∙ (π ∙ < id1 A 1 , x ∙ ○ 1 > ) , x ∙ ○ 1 > ) ≈⟨ cdr (π-cong (cdr (IsCCC.e3a isCCC)) (cdr (trans-hom e2 (sym e2)))) ⟩
301 ε ∙ ( < f ∙ id1 A 1 , Poly.x φ ∙ id1 A 1 > ) ≈⟨ cdr (π-cong idR idR ) ⟩ 318 ε ∙ ( < f ∙ id1 A 1 , x ∙ id1 A 1 > ) ≈⟨ cdr (π-cong idR idR ) ⟩
302 ε ∙ < f , Poly.x φ > ≈⟨ eq ⟩ 319 ε ∙ < f , x > ≈⟨ eq ⟩
303 Poly.f φ ∎ ))) ⟩ 320 Poly.f φ ∎ ))) ⟩
304 ((ε ∙ < f ∙ π , π' > ) ∙ < π' , π > ) ∙ ( < id1 A _ , ○ a > ∙ π' ) ≈↑⟨ assoc ⟩ 321 ((ε ∙ < f ∙ π , π' > ) ∙ < π' , π > ) ∙ ( < id1 A _ , ○ a > ∙ π' ) ≈↑⟨ assoc ⟩
305 (ε ∙ < f ∙ π , π' > ) ∙ (< π' , π > ∙ ( < id1 A _ , ○ a > ∙ π' ) ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩ 322 (ε ∙ < f ∙ π , π' > ) ∙ (< π' , π > ∙ ( < id1 A _ , ○ a > ∙ π' ) ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
306 (ε ∙ < f ∙ π , π' > ) ∙ (< π' ∙ ( < id1 A _ , ○ a > ∙ π' ) , π ∙ ( < id1 A _ , ○ a > ∙ π' ) > ) ≈⟨ cdr (π-cong assoc assoc ) ⟩ 323 (ε ∙ < f ∙ π , π' > ) ∙ (< π' ∙ ( < id1 A _ , ○ a > ∙ π' ) , π ∙ ( < id1 A _ , ○ a > ∙ π' ) > ) ≈⟨ cdr (π-cong assoc assoc ) ⟩
307 (ε ∙ < f ∙ π , π' > ) ∙ (< (π' ∙ < id1 A _ , ○ a > ) ∙ π' , (π ∙ < id1 A _ , ○ a > ) ∙ π' > ) 324 (ε ∙ < f ∙ π , π' > ) ∙ (< (π' ∙ < id1 A _ , ○ a > ) ∙ π' , (π ∙ < id1 A _ , ○ a > ) ∙ π' > )