私はCoqを学習しており、練習としてタイプFnArity (N:nat)
をすべてのN
引数をエンコードするように定義したいと考えています。それは次のとおりです。CoqのN個の要素のすべての関数を含む型
Check FnArity 3 : (forall A B C : Set, A -> B -> C).
作業をする必要がありますが
Check FnArity 2 : (forall A B C D : Set, A -> B -> C -> D).
は動作しないようにしてください。
これは教育目的のためのもので、関連するリソースは大歓迎です。
EDITは: 作曲N組成演算子をg
はNを期待f
とg
を構成する組成演算子に相当します。これまでの回答から、私はおそらくので、ここで間違ってこれを近づいています、私は証明しようとしている命題があると認識します議論
(.).(.) ... N times ... (.).(.) f g = \a1, .. aN -> f (g (a1, .. , aN))
はEDIT2:のCoQの面では:ハスケルっぽい面では
Definition compose { A B C : Type } (F : C -> B) (G : A -> C) : A -> B :=
fun x => F (G (x)).
Definition compose2 {A1 A2 B C : Type} (F : C -> B) (G : A1 -> A2 -> C)
: A1 -> A2 -> B := fun x y => F (G x y).
Definition compose3 {A1 A2 A3 B C : Type} (F : C -> B) (G : A1 -> A2 -> A3 -> C)
: A1 -> A2 -> A3 -> B := fun x y z => F (G x y z).
(* The simplest case *)
Theorem dual_compose : forall {A B C D : Type} (f: D -> C) (g : A -> B -> D) ,
(compose compose compose) f g = compose2 f g.
Proof. reflexivity. Qed.
Theorem triple_compose : forall {A1 A2 A3 B C : Type} (f: C -> B) (g : A1 -> A2 -> A3 -> C) ,
(compose (compose (compose) compose) compose) f g =
compose3 f g.
私が欲しいものcomposeN
のための一般的な定理を定義することです。
あなたは確かに私の質問に答えているようだが、私は派生したタイプを私の問題のために働かせることはできませんでした。私の編集内容を確認し、あなたの答えを修正してください。 – fakedrake
@fakedrakeこの場合、たぶんタイプ 'FnArityAux1'が必要です。私は何かを考え出すことができるかどうかを見ます。 –
また、 '&'記号はどういう意味ですか?私はそれが何らかのインディックス存在量限定子であると仮定しますが、それに関する文書を見つけることができませんでしたか? – fakedrake