Для лінійно обмежених автоматів неможливо перевірити, чи є програми C ++, і навряд чи можливо для LBA перевірити, чи добре набрані програми SML. C ++ має систему типу Тюрінга, оскільки ви можете кодувати довільні програми як шаблонні метапрограми.
SML цікавіше. У нього є рішуча перевірка типу, але проблема є EXPTIME-завершеною. Отже, навряд чи LBA зможе це перевірити, якщо тільки в ієрархії складності не буде дуже дивного колапсу. Причиною цього є те, що для SML необхідний висновок про тип, і є сім'ї програм, розмір яких тип зростає набагато швидше, ніж розмір програми. Як приклад, розглянемо таку програму:
fun delta x = (x, x) (* this has type 'a -> ('a * 'a), so its return value
has a type double the size of its argument *)
fun f1 x = delta (delta x) (* Now we use functions to iterate this process *)
fun f2 x = f1 (f1 x)
fun f3 x = f2 (f2 x) (* This function has a HUGE type *)
Для легших систем типу, таких як C або Pascal, я вважаю, що LBA може це перевірити.
У перші дні досліджень мов програмування люди іноді використовували граматики ван Вінгардена (також дворівневі граматики) для визначення типів систем для мов програмування. Я вважаю, Algol 68 був визначений таким чином. Однак, як мені кажуть, ця техніка була відмовлена з по суті прагматичних причин: людям виявилося досить складно писати граматики, які вказували, що вони думають, що вони конкретизували! (Зазвичай, граматики, які люди писали, створювали більші мови, ніж вони планували.)
У наші дні люди використовують схематичні правила виводу для визначення типів систем, що, по суті, є способом визначення предикатів як найменш фіксованої точки колекції застережень Рога. Задовільність для теорій рогів першого порядку загалом не визначається, тому якщо ви хочете зафіксувати все, що роблять теоретики, то будь-який граматичний формалізм ви виберете, буде сильнішим, ніж це дійсно зручно.
Я знаю, що було виконано певну роботу з використання граматики атрибутів для впровадження систем типів. Вони стверджують, що для цього вибору є деякі переваги програмної інженерії: а саме, граматики атрибутів дуже суворо контролюють потік інформації, і мені кажуть, що це полегшує розуміння програми.