Предположим, у меня есть тип записи для некоторой алгебраической структуры; например для моноидов:
{-# OPTIONS --cubical #-}
module _ where
open import Cubical.Core.Everything
open import Cubical.Foundations.Everything hiding (assoc)
record Monoid {ℓ} (A : Type ℓ) : Type ℓ where
field
set : isSet A
_⋄_ : A → A → A
e : A
eˡ : ∀ x → e ⋄ x ≡ x
eʳ : ∀ x → x ⋄ e ≡ x
assoc : ∀ x y z → (x ⋄ y) ⋄ z ≡ x ⋄ (y ⋄ z)
Затем я могу вручную создать тип для гомоморфизмов моноидов:
record Hom {ℓ ℓ′} {A : Type ℓ} {B : Type ℓ′} (M : Monoid A) (N : Monoid B) : Type (ℓ-max ℓ ℓ′) where
open Monoid M renaming (_⋄_ to _⊕_)
open Monoid N renaming (_⋄_ to _⊗_; e to ε)
field
map : A → B
map-unit : map e ≡ ε
map-op : ∀ x y → map (x ⊕ y) ≡ map x ⊗ map y
Но есть ли способ определить Hom
без разъяснения законов гомоморфизма? Так что как некое сопоставление свидетеля M : Monoid A
с N : Monoid B
, но для меня это не имеет большого смысла, потому что это будет "сопоставление", где мы уже знаем, что он должен отображать M
на N
...
1 ответ
В настоящее время нет. Но это то, что является продолжением недавней статьи Функция для разделения данные по желанию примерно. В репо для этой работы вы найдете источники для 'package бывший'; в сопроводительной документации используется {{X0} } в качестве одного из примеров, а раздел 2.17 посвящен генерации гомоморфизмов.
Цель этого прототипа - выяснить, какие функции необходимы (и осуществимы), чтобы направлять разработку как метатеории, так и реализации «внутри Agda».
Похожие вопросы
Новые вопросы
agda
Agda - это типизированный, полностью функциональный язык программирования и помощник по проверке.