Abstract. We develop a general tool to formalize and reason about languages expressed using higher-order abstract syntax in a proof-tool based on type theory (Coq). A language is specified by its signature, which consists of sets of sort and operation names and typing rules. These rules prescribe the sorts and bindings of each operation. An algebra of terms is associated to a signature, using de Bruijn notation. Then a higher-order notation is built on top of the de Bruijn level, so that the user can work with meta-variables instead of de Bruijn indices. We also provide recursion and induction principles formulated directly on the higher-order syntax. This generalizes work on the Hybrid approach to higher-order syntax in Isabelle and our earlier work on a constructive extension to Hybrid formalized in Coq. In particular, a large class of theorems that must be repeated for each object language in Hybrid is done once in the present work and can be applied directly to each object language. §1. Introduction. We aim to use proof assistants (in our specific case Coq [9,6]) to formally represent and reason about languages using higher-order syntax, i.e. object languages where binding operators are expressed using binding at the meta-level. This is an active and fertile field of research. Several methods contend to become the most elegant, efficient, and easy to use. The differences stem from the approach of the researchers and the characteristics of the proof tool used.Our starting point was the work on the Hybrid tool in Isabelle/HOL by Ambler, Crole, and Momigliano [2]. We began by replicating their development step by step in Coq, but soon realized that the different underlying meta-theory (the Calculus of Inductive Constructions [10,38], as opposed to higher-order logic) provided us with different tools and led us to diverge from a simple translation of their work. The final result [8] exploits the computational content of the Coq logic: we prove a recursion principle that can be used to program functions on the object language. These functions can be directly computed inside Coq. In the present work, we extend it and provide a general tool in which the user can easily define a language by giving its signature, and a set of tools (higher-order notation, recursion and induction principles) are automatically available.Let us introduce the problem of representing languages with bindings in a logical framework. While a first-order language contains operation symbols that take just elements of the domain(s) as arguments, a second-order language may have operations whose input consists of functions of arbitrary complexity. From a syntactic point of view these operations bind some of the free variables in their arguments. The simplest example of this phenomenon is the abstraction operation in λ-calculus. We can see the operation λ, syntactically, as a binder; 1