Представление гомоморфизмов без выписывания всех законов

Предположим, у меня есть тип записи для некоторой алгебраической структуры; например, для моноидов:

{-# 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 ответ

Решение

В настоящее время нет. Но это то, о чем идет речь в продолжении недавней статьи "Функция разделения данных по желанию". В репозитории для этой работы вы найдете исходные коды для "прежнего пакета"; в сопроводительной документации используетсяMonoid как один из его примеров, а раздел 2.17 посвящен генерации гомоморфизмов.

Цель этого прототипа - выяснить, какие функции необходимы (и осуществимы), чтобы направлять разработку как метатеории, так и реализации "внутри Agda".

Другие вопросы по тегам