我不明白您的功能应该完成什么,但它应该具有这种形状:
Axioms (s1 s2 s3 : Set) (f3 : s3) (f4 : s1 -> s3 -> s3) (f1 : s2)
(f2 : s3 -> s2 -> s2).
Fixpoint my_funct_aux (l1 : list s1) : s3 :=
match l1 with
| nil => f3
| cons e1 l2 => f4 e1 (my_funct_aux l2)
end.
Fixpoint my_funct (l1 : list (list s1)) : s2 :=
match l1 with
| nil => f1
| cons l2 l3 => f2 (my_funct_aux l2) (my_funct l3)
end.
或者,如果您不介意简洁:
Axioms (s1 s2 s3 : Set) (f3 : s3) (f4 : s1 -> s3 -> s3) (f1 : s2)
(f2 : s3 -> s2 -> s2).
Fixpoint fold {s1 s2 : Set}
(f1 : s2) (f2 : s1 -> s2 -> s2) (l1 : list s1) : s2 :=
match l1 with
| nil => f1
| cons e1 l2 => f2 e1 (fold f1 f2 l2)
end.
Definition my_funct : list (list s1) -> s2 :=
fold f1 (fun l1 l2 => f2 (fold f3 f4 l1) l2).