我有这种类型
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