Мене цікавлять перевірені компілятори, формалізовані в теорії типу Мартіна-Лефа, тобто Coq / Agda. На даний момент я написав невеликий приклад іграшки. Цим я можу довести, що мої оптимізації правильні. Наприклад, що доповнення з нулем можна усунути, тобто вирази типу "x + 0".
Чи є оптимізації, які складно виконати звичайному компілятору, які можуть слугувати хорошим прикладом? Чи можливо довести певні властивості програми, які дозволяють оптимізувати, які неможливо виконати за допомогою звичайного компілятора? (тобто без умовиводу, який можливий із доведенням теореми)
Мені були б цікаві ідеї чи приклади, а також посилання на цю тему.
Пов'язане питання: Докази правильності компілятора
редагувати: Як Цуйоші чудово сказав це в коментарях: я шукаю методи оптимізації, які важко реалізувати, якщо компілятор написаний (скажімо) C, але простіший у застосуванні, якщо компілятор написаний у (скажімо) Coq. Коли Agda компілюється в C (через haskell), можна зробити все, що можливо в Agda, також і в C. Мабуть, єдиною перевагою доказів теорем, таких як Coq / Agda, є те, що компілятор та оптимізації можна перевірити.
edit2: За пропозицією Vijay DI написати те, що я читав до цього часу. В основному я зосередився на Ксав'єрі Лерої та проекті CompCert в INRIA (я думаю, що на 80 сторінках є хороший прочитання). Другий інтерес викликала робота Антона Сетцера над інтерактивними програмами. Я хоч це, можливо, його робота може бути використана для доведення властивостей програм IO та бісімуляції програм IO. Дякуємо, що згадали про Sewell. Я чув його розмови "Казки з джунглів" в ICFP і прочитав, можливо, 2-3 його статті. Але я спеціально не дивився на його роботу та роботу його співавторів.
Я ще не дізнався, з чого почати чи шукати папери з оптимізації компіляторів; наприклад, які оптимізації було б цікаво подивитися в налаштуваннях перевіреного компілятора.