代数構造(たとえばすべてのモノイドのクラス)に対応するクラスを正式化しようとすると、必要なすべてのモデルをモデル化する製品タイプとしてmonoid (a:Type)
タイプを作成するのが自然な設計です(要素e:a
、オペレータapp : a -> a -> a
、モノイド法が満たされていることの証明など)。その際、マップmonoid: Type -> Type
を作成しています。このアプローチの潜在的な欠点は、モノタイプm:monoid a
(サポートタイプがa
のモノイド)とm':monoid b
(モノイドサポートタイプb
)が与えられていると、タイプが不正であるため、同等性m = m'
を書くことはできません。別の設計では、タイプmonoid
を作成することになります。サポートタイプは別のフィールドa:Type
であるため、m m':monoid
を指定すると、m = m'
かどうかを尋ねるのは常に意味があります。何らかの形で、m
とm'
が同じサポート(a m = a m
)を持ち、演算子が等価(等価の公理のおかげで達成できるかもしれないapp m = app m'
)であり、証明フィールドが問題ではないと主張したいと思います何らかの証明が無関係な公理を持っているなど)、m = m'
。それは悪い型付けされているため、残念ながら、私たちはイベント我々が持っていると仮定し、問題を単純化するために...従属型のインスタンス間の等価性の証明
を平等app m = app m'
を表現することはできません。
Inductive myType : Type :=
| make : forall (a:Type), a -> myType.
.
私は、フォームの結果を持っているしたいと思います:
forall (a b:Type) (x:a) (y:b), a = b -> x = y -> make a x = make b y.
この文は入力できないので、入力できません。
私は公理は私が2種類a
とb
が同じであることを証明することができますがあり、私はx
とy
があまりにも確かに同じであることを示すことができるかもしれないが、私は私があると結論することが可能なツールを持っていると思いますmake a x = make b y
。どんな提案も大歓迎です。
こんにちはヴィルヘルム、これは大変ありがとうございます! –