{"id":3558,"date":"2025-09-15T15:55:01","date_gmt":"2025-09-15T14:55:01","guid":{"rendered":"https:\/\/blogs.qub.ac.uk\/dipsa\/?p=3558"},"modified":"2026-05-06T20:17:27","modified_gmt":"2026-05-06T19:17:27","slug":"invited-talk-a-constraint-programming-solver-you-can-trust-but-dont-have-to-by-ciaran-mccreesh","status":"publish","type":"post","link":"https:\/\/blogs.qub.ac.uk\/dipsa\/invited-talk-a-constraint-programming-solver-you-can-trust-but-dont-have-to-by-ciaran-mccreesh\/","title":{"rendered":"Invited Talk &#8211; A Constraint Programming Solver You Can Trust (But Don&#8217;t Have To) by Ciaran McCreesh"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">28 August 2025<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Abstract<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Constraint programming is a declarative way of solving hard combinatorial, scheduling, resource allocation, and logistics problems. We specify a problem in a high-level language, give it to a solver, and the solver thinks for a while and then gives us the optimal answer. Unfortunately, even the best commercial and academic solvers contain bugs and will occasionally give a wrong answer, potentially with devastating effects. One way of avoiding this situation is through proof logging, where solvers are modified to output a mathematical proof of correctness alongside their solution. This proof can then be independently audited by a very simple (and potentially even formally verified) proof-checking tool, giving us complete confidence in the correctness of solutions (although not the solvers themselves). I&#8217;ll explain how proof logging works in general, and give an overview of the challenges and fun involved in bringing it to constraint programming. Ultimately, the aim here is to make algorithms something people can trust with their lives and livelihoods, just as engineers have already done with bridges, planes, and lifts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ciaran McCreesh is a Royal Academy of Engineering Research Fellow working in the Formal Analysis, Theory and Algorithms group in the School of Computing Science at the University of Glasgow. His research looks at practical parallel algorithms, particularly in relation to hard subgraph problems. His publications cover combinatorial search, parallel algorithms, and constraint programming.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" data-id=\"3771\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-1024x576.jpg\" alt=\"\" class=\"wp-image-3771\" srcset=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-1024x576.jpg 1024w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-300x169.jpg 300w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-768x432.jpg 768w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-1536x864.jpg 1536w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-2048x1152.jpg 2048w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-1110x624.jpg 1110w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152138489-528x297.jpg 528w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"576\" data-id=\"3770\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-1024x576.jpg\" alt=\"\" class=\"wp-image-3770\" srcset=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-1024x576.jpg 1024w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-300x169.jpg 300w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-768x432.jpg 768w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-1536x864.jpg 1536w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-2048x1152.jpg 2048w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-1110x624.jpg 1110w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250828_152140738-528x297.jpg 528w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"576\" data-id=\"3768\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-1024x576.jpg\" alt=\"\" class=\"wp-image-3768\" srcset=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-1024x576.jpg 1024w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-300x169.jpg 300w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-768x432.jpg 768w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-1536x864.jpg 1536w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-2048x1152.jpg 2048w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-1110x624.jpg 1110w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121637549-528x297.jpg 528w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-id=\"3769\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-1024x576.jpg\" alt=\"\" class=\"wp-image-3769\" srcset=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-1024x576.jpg 1024w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-300x169.jpg 300w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-768x432.jpg 768w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-1536x864.jpg 1536w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-2048x1152.jpg 2048w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-1110x624.jpg 1110w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/09\/PXL_20250829_121635752-528x297.jpg 528w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n","protected":false},"excerpt":{"rendered":"<p>28 August 2025 Abstract Constraint programming is a declarative way of solving hard combinatorial, scheduling, resource allocation, and logistics problems. We specify a problem in a high-level language, give it to a solver, and the solver thinks for a while and then gives us the optimal answer. Unfortunately, even the best commercial and academic solvers [&hellip;]<\/p>\n","protected":false},"author":974,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[154],"tags":[33],"class_list":["post-3558","post","type-post","status-publish","format-standard","category-talks","tag-seminars","czr-hentry"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/users\/974"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/comments?post=3558"}],"version-history":[{"count":2,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3558\/revisions"}],"predecessor-version":[{"id":3772,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/3558\/revisions\/3772"}],"wp:attachment":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media?parent=3558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/categories?post=3558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/tags?post=3558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}