私はこのタイプです
Inductive coef :=
| Mycoef_ex2 : matrix -> coef
with matrix :=
| My_matrix : list (list coef) -> matrix.
Inductive my_type :=
| Mytype_ex1 : list my_type -> my_type
| Mytype_int : Z -> my_type
| Mytype_coef : coef -> my_type.
Ocaml
私は書くことができます:
let test_mytype := function
| Mytype_ex1 [Mytype_coef (Mycoef_ex2 (My_matrix m)); Mytype_int i] :: ps -> ...
m
私の関数が両方の引数を必要とi
するのと同じ関数で引数を使用したいのですCoq
が、たとえば、Coq
Definition test_mytype (m: my_type) :=
match m with
| Mytype_ex1 (Mytype_coef (Mycoef_ex2 (My_matrix m)))
| Mytype_int i :: ps => my_function m i
...
end.
エラーが発生しました:
Toplevel input, characters 82-215:
Error: The components of this disjunctive pattern must bind the same variables.
この関数を以下のように書くと、意志は受け入れられますが、両方を同時にCoq
使用することはできませんm
i
Definition test_mytype (m: my_type) :=
match m with
| Mytype_ex1 (Mytype_coef (Mycoef_ex2 (My_matrix m))) :: ps => ...
| Mytype_ex1 (Mytype_int i) :: ps => ...
...
end.
私はまた、例えばマッチングを使用しようとしました:
Definition test_mytype (m1, m2: my_type) :=
match m1, m2 with
| Mytype_ex1 (Mytype_coef (Mycoef_ex2 (My_matrix m))) :: ps,
| Mytype_ex1 (Mytype_int i) :: ps => ...
...
end.
しかし、私の問題は両方m
でありi
、同じに属する必要がありm: my_type
ます。
で とを同時にtest_mytype
使用できる関数をどのように書けばよいか知っていますか?m
i
Coq