Я хотел бы написать лимит в категории наборов, используя Agda
. Предполагая локальную малость, функтор — это пара отображения на Set OC и I, как здесь.
sobj : OC → Set c₂
smap : { i j : OC } → (f : I ) → sobj i → sobj j
Конус для функтора — это запись с двумя полями. С помощью записи легко показать коммутативность конуса и свойства Предела, кроме единственности. Уникальность Лимита заключается в совпадении записей с двумя полями.
В следующем коде agda я хочу доказать лемму snat-cong.
open import Level
module S where
open import Relation.Binary.Core
open import Function
import Relation.Binary.PropositionalEquality
record snat { c₂ } { I OC : Set c₂ } ( sobj : OC → Set c₂ )
( smap : { i j : OC } → (f : I ) → sobj i → sobj j ) : Set c₂ where
field
snmap : ( i : OC ) → sobj i
sncommute : ( i j : OC ) → ( f : I ) → smap f ( snmap i ) ≡ snmap j
smap0 : { i j : OC } → (f : I ) → sobj i → sobj j
smap0 {i} {j} f x = smap f x
open snat
snat-cong : { c : Level } { I OC : Set c } { SObj : OC → Set c } { SMap : { i j : OC } → (f : I )→ SObj i → SObj j }
( s t : snat SObj SMap )
→ ( ( λ i → snmap s i ) ≡ ( λ i → snmap t i ) )
→ ( ( λ i j f → smap0 s f ( snmap s i ) ≡ snmap s j ) ≡ ( ( λ i j f → smap0 t f ( snmap t i ) ≡ snmap t j ) ) )
→ s ≡ t
snat-cong s t refl refl = {!!}
Это очень похоже на ответ Равенство для зависимых типов записей.
Так что это должно работать что-то вроде
snat-cong s t refl refl = refl
но выдает такую ошибку.
.sncommute i j f != sncommute t i j f of type
.SMap f (snmap t i) ≡ snmap t j
Есть ли помощь?
snat-cong
, можете ли вы уточнить это? Вы имеете в виду(∀ i j f → (smap0 s f (snmap s i) ≡ snmap s j) ≡ (smap0 t f (snmap t i) ≡ snmap t j))
? - person Cactus   schedule 13.06.2017