私がbeforeに言ったように、私は代数、行列、およびカテゴリ理論についての図書館で働いています。私は代数構造を表すレコード型の「塔」の代数構造を分解しました。例として、モノイドを指定するには、最初に半グループを定義し、Agda標準ライブラリと同じパターンに従って、monoid定義を使用する可換性モノイドを定義します。ネストされたレコードを使用するより便利な方法はありますか?
私のトラブルは、私は別の1つの中の深いです代数構造(CommutativeSemiring
の一部であるMonoid
の例えばプロパティ)のプロパティを必要とするとき、我々は必要な代数構造に等しい突起の数を使用する必要があるということです深さ私の問題の一例として、
、以下の「補題」を検討:モノイドの左側のIDプロパティにアクセスするために、私は内でモノイドからそれを投影する必要があることに注意
open import Algebra
open import Algebra.Structures
open import Data.Vec
open import Relation.Binary.PropositionalEquality
open import Algebra.FunctionProperties
open import Data.Product
module _ {Carrier : Set} {_+_ _*_ : Op₂ Carrier} {0# 1# : Carrier} (ICSR : IsCommutativeSemiring _≡_ _+_ _*_ 0# 1#) where
csr : CommutativeSemiring _ _
csr = record{ isCommutativeSemiring = ICSR }
zipWith-replicate-0# : ∀ {n}(xs : Vec Carrier n) → zipWith _+_ (replicate 0#) xs ≡ xs
zipWith-replicate-0# [] = refl
zipWith-replicate-0# (x ∷ xs) = cong₂ _∷_ (proj₁ (IsMonoid.identity (IsCommutativeMonoid.isMonoid
(IsCommutativeSemiring.+-isCommutativeMonoid
(CommutativeSemiring.isCommutativeSemiring csr)))) x)
(zipWith-replicate-0# xs)
を交換可能なモノイドは交換可能なセミリーディングの構造にあります。
私が懸念しているのは、ますます多くの代数構造を追加すると、そのような補題は読めなくなるということです。
私の質問です:記録投影のこの「はしご」を避けるパターンやトリックはありますか?
これに関する手掛かりは大変歓迎します。