Le système de reconnaissance automatique de partitions d'orchestre (plusieurs pupitres et plusieurs voix) conçu par Bertrand Coüasnon [Coüasnon et al. 95, Coüasnon 96] est une application particulièrement intéressante par la complexité de sa mise en uvre. Elle combine la reconnaissance de primitives graphiques par des méthodes de type traitement du signal, et la reconnaissance de leur agencement formalisé à l'aide d'une grammaire bidimensionnelle. C'est le second type de reconnaissance qui emploie Prolog.
L'objectif de cette recherche était d'étudier comment la connaissance de l'application (ici, reconnaissance de partitions d'orchestre, mais plus généralement reconnaissance d'un type particulier de document formaté) permet de traiter des documents de mauvaise qualité où les primitives graphiques sont altérées. Ici, des symboles musicaux peuvent être collés entre eux, d'autres peuvent être scindés en parties déconnectées, des pixels peuvent être attribués à tort à des symboles musicaux alors qu'ils appartiennent aux lignes de portée et vice-versa, et enfin les lignes de portée peuvent ne pas être droites (effet fréquent de la photocopie) ou être interrompues. De plus, et indépendamment de la qualité de la reproduction du document, sa composition peut être imprécise, avec en particulier un alignement vertical des différentes voix qui ne respecte pas les temps. Cela arrive surtout pour des partitions composées à la main. La connaissance a priori du format des partitions d'orchestre permet au système de reconnaissance de s'attendre à trouver tel ou tel symbole en tel ou tel endroit, et de l'y trouver même mutilé. Le slogan «pas de reconnaissance sans connaissance a priori» résume cette idée.
Une des originalités de ce système est que les deux niveaux de reconnaissance communiquent dans les deux sens. C'est d'ailleurs pourquoi l'auteur de ce système a choisi * pour le mettre en uvre. Le système permet d'interfacer de manière complexe un composant symbolique écrit en Prolog et un composant numérique. Dans le cas de cette application, le niveau traitement du signal extrait d'une image binaire des primitives graphiques qu'il communique au niveau grammatical. Celui-ci tente d'y reconnaître les éléments d'une partition, et lorsqu'il n'y arrive pas demande au premier niveau de scinder ou amalgamer des primitives selon ce que suggère la connaissance a priori. Cette manière de faire permet de restaurer les informations altérées dans un document de mauvaise qualité graphique en utilisant la connaissance a priori codée sous la forme d'une grammaire bidimensionnelle de partition qui décrit le «langage» des armures, des altérations, etc.
C'est seulement dans un second temps que Coüasnon a utilisé le potentiel de l'ordre supérieur pour manipuler des structures complexes. Ainsi, la partie symbolique du reconnaisseur de partition est produite automatiquement à partir de la grammaire bidimensionnelle des partitions. C'est à nouveau un cas de métaprogrammation. L'analyseur produit utilise intensivement le prédicat de contrôle freeze pour s'affranchir de la stratégie de sélection des buts de gauche à droite. Cette application contient environ 8000 lignes de Prolog, 2000 de grammaire des partitions d'orchestre, et 20000 de C et C++. Le temps d'exécution de cette application est également réparti entre la partie numérique et la partie symbolique.
On retrouve cette structure en deux niveaux communiquant dans une application d'analyse de données agriculturales en Australie (Australian Defence Force Academy). Ici, c'est un niveau de traitement statistique qui cohabite avec le niveau symbolique. Nous savons assez peu de chose sur cette application car ses auteurs sont fort discrets. C'est la rançon de la distribution anonyme d'un logiciel. Au nombre des utilisations «discrètes» de on peut compter aussi la synthèse de circuits intégrés à l'université d'Oxford [McPhee 95]. Notons enfin que cette application utilise aussi de manière cruciale la faculté de suspendre l'exécution d'un but (gel ou freeze).