{"id":2532,"date":"2019-07-10T10:37:45","date_gmt":"2019-07-10T09:37:45","guid":{"rendered":"https:\/\/www.prover.com\/?p=2532"},"modified":"2025-01-08T16:23:16","modified_gmt":"2025-01-08T15:23:16","slug":"using-hll-to-solve-sudoku-puzzles","status":"publish","type":"post","link":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/","title":{"rendered":"Using HLL to solve Sudoku puzzles"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1280px + 80px );margin-left: calc(-80px \/ 2 );margin-right: calc(-80px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-blend:overlay;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:40px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:40px;--awb-width-medium:100%;--awb-spacing-right-medium:40px;--awb-spacing-left-medium:40px;--awb-width-small:100%;--awb-spacing-right-small:40px;--awb-spacing-left-small:40px;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p style=\"text-align: left;\">In a <a href=\"https:\/\/www.prover.com\/formal-methods\/hll-formal-language\/\">recent post<\/a> we celebrated the 10th anniversary of the declarative, formal language\u00a0<a href=\"https:\/\/www.prover.com\/software-solutions-rail-control\/hll-high-level-language\/\">HLL<\/a>. The language is used extensively in the railway signaling domain for the formal verification of interlocking logic and CBTC subsystems (such as zone controllers). In this more technical post we will familiarize the reader further with HLL, by formalizing the famous Sudoku problem in the language, and using an off-the-shelf proof engine to solve Sudoku puzzles.<\/p>\n<p>The Sudoku problem is a very easy problem for modern proof engines (such as SAT solvers), but it will serve us well in introducing the reader to HLL. To be sure, we will only be able to illustrate a relatively small subset of HLL, a language which has grown quite a bit over the years. To formalize and solve Sudoku problems we will mainly need integers, arrays and quantifiers.<\/p>\n<h3>Creating the grid<\/h3>\n<p>We start by representing a partially filled Sudoku grid using a 9\u00d79 matrix where each element is an integer in the range 0 to 9. Empty slots are filled with zeroes. The problem itself was in the \"Very Difficult\" category over at\u00a0<a href=\"http:\/\/www.7sudoku.com\/.\">7sudoku<\/a>.<\/p>\n<pre>Declarations:\r\n int partialGrid[9][9];\r\nDefinitions:\r\n partialGrid := ;<\/pre>\n<p>Then, we will define our problem grid by replacing the zeroes in the partial grid with unknown integers in the range 1 to 9. Creating unknown (or free) variables in HLL is very simple: we just need to declare them.<\/p>\n<pre>Declarations:\r\n int [1,9] unknown[9][9];\r\n int [1,9] grid[9][9];\r\nDefinitions:\r\n grid[i][j] := if partialGrid[i][j] == 0 then unknown[i][j] \r\n                                         else partialGrid[i][j];<\/pre>\n<h3>Expressing the Sudoku problem<\/h3>\n<p>Now, we will express the Sudoku problem itself over our grid, by using quantification. Remember that the objective of a Sudoku is to fill the grid so that all rows, all columns and all of the nine 3\u00d73 subgrids each contains all the digits from 1 to 9. In HLL, array-indexing is 0-based, yielding the below formulation of our Sudoku-objective.<\/p>\n<pre>Definitions:\r\n objective := ALL digit:[1,9] (\r\n    ALL row:[0,8] SOME col:[0,8] (grid[row][col] == digit)\r\n  & ALL col:[0,8] SOME row:[0,8] (grid[row][col] == digit)\r\n  & ALL subgridRow:[0,2], subgridCol:[0,2]\r\n      SOME sRow:[0,2], sCol:[0,2]\r\n    (grid[subgridRow * 3 + sRow]\r\n         [subgridCol * 3 + sCol] == digit));<\/pre>\n<p>Finally, we will ask a proof engine whether our objective is attainable (or satisfiable) or not. We do that by trying to prove that there is no solution (by negating the problem). If there is a solution (i.e. a counterexample to our proof), the proof engine will provide us with it.<\/p>\n<pre>Proof Obligations:\r\n ~objective;<\/pre>\n<p>Using a modern proof engine (such as Prover SL Certifier Edition) we will be provided with a solution in a fraction of a second.<\/p>\n<pre>$1*: grid[0][0] is [1]\r\n$2: grid[0][1] is [7]\r\n$3: grid[0][2] is [6]\r\n$4: grid[0][3] is [4]\r\n$5: grid[0][4] is [5]\r\n$6: grid[0][5] is [3]\r\n$7: grid[0][6] is [8]\r\n$8: grid[0][7] is [9]\r\n$9: grid[0][8] is [2]\r\n    ...\r\n$80: grid[8][7] is [2]\r\n$81: grid[8][8] is [9]<\/pre>\n<h3>Improving the presentation<\/h3>\n<p>To improve the presentation a bit, we will use the temporal dimension of HLL (cf.\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_temporal_logic\">LTL<\/a>). HLL is a language based on streams, which are just infinite sequences of values, one for each discrete time step. The idea is to transform the 9\u00d79 grid into 9 streams (representing the rows), of which we will inspect only the 9 first values. Doing this is a bit technical. We need to 1) redefine the grid as a memory that keeps its value in each time step, and 2) define a counter that counts time steps modulo 9 (starting at 0), before we can create our 9 \"stream rows\".<\/p>\n<pre>Declarations:\r\n int [0,8] counter;\r\n int [1,9] rows[9];\r\nDefinitions:\r\n grid[i][j] := if partialGrid[i][j] == 0 then unknown[i][j] \r\n                                         else partialGrid[i][j],\r\n               grid[i][j]; \/\/ Keep value in next time step\r\n counter := 0, (counter + 1) % 9;\r\n rows[i] := grid[i][counter];<\/pre>\n<p>Finally, when asked to extend the solution up to the 9th time step, the proof engine provides us with a prettier view of the Sudoku-solution (without any measurable time penalty by the way).<\/p>\n<pre>$1*: rows[0] is 1 7 6 4 5 3 8 9 [2]\r\n$2: rows[1] is 9 4 2 7 8 1 3 6 [5]\r\n$3: rows[2] is 5 8 3 6 2 9 7 4 [1]\r\n$4: rows[3] is 3 9 1 5 4 6 2 8 [7]\r\n$5: rows[4] is 6 2 7 9 1 8 5 3 [4]\r\n$6: rows[5] is 4 5 8 2 3 7 9 1 [6]\r\n$7: rows[6] is 2 1 4 8 9 5 6 7 [3]\r\n$8: rows[7] is 7 3 9 1 6 2 4 5 [8]\r\n$9: rows[8] is 8 6 5 3 7 4 1 2 [9]<\/pre>\n<p>Note that this is the raw, unedited, output given by the proof engine's \"Why\"-module, which can be used to interactively explore counterexamples.<\/p>\n<h3>Summary<\/h3>\n<p>To summarize, we have shown how the well-known Sudoku problem can be formalized in HLL and solved using a general purpose proof engine (don't hesitate to contact <a href=\"mailto:sales@prover.com\">sales@prover.com<\/a> to buy your own license!). The output has been optimized using prefixes of length 9 of streams (sequences of values), so that it looks almost like what one would expect from a purpose-built Sudoku solver.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top-small:0px;--awb-padding-bottom-small:0px;--awb-margin-top:60px;--awb-margin-bottom:0px;--awb-background-color:var(--awb-color2);--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-space-around fusion-flex-content-wrap\" style=\"max-width:calc( 1280px + 80px );margin-left: calc(-80px \/ 2 );margin-right: calc(-80px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-filter:opacity(40%);--awb-filter-transition:filter 0.3s ease;--awb-filter-hover:opacity(100%);--awb-width-large:25%;--awb-margin-top-large:22px;--awb-spacing-right-large:23px;--awb-margin-bottom-large:22px;--awb-spacing-left-large:40px;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:23px;--awb-spacing-left-medium:40px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:40px;--awb-spacing-left-small:40px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element fusion-no-small-visibility\" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"300\" height=\"300\" title=\"safety\" src=\"https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety.png\" data-orig-src=\"https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety-300x300.png\" alt class=\"lazyload img-responsive wp-image-19693\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27700%27%20height%3D%27700%27%20viewBox%3D%270%200%20700%20700%27%3E%3Crect%20width%3D%27700%27%20height%3D%27700%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety-200x200.png 200w, https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety-400x400.png 400w, https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety-600x600.png 600w, https:\/\/www.prover.com\/wp-content\/uploads\/2024\/07\/safety.png 700w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 840px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_3_4 3_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:75%;--awb-margin-top-large:0px;--awb-spacing-right-large:41px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:11px;--awb-width-medium:75%;--awb-order-medium:0;--awb-spacing-right-medium:41px;--awb-spacing-left-medium:11px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:40px;--awb-spacing-left-small:40px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-2\"><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-four\">\n<h4 class=\"fusion-title-heading title-heading-left\">How safe and efficient are your rail control systems? <u style=\"color: var(--awb-text-color); font-family: var(--h4_typography-font-family); font-size: 1em; font-style: var(--h4_typography-font-style,normal); font-weight: var(--h4_typography-font-weight); letter-spacing: var(--h4_typography-letter-spacing); text-transform: var(--h4_typography-text-transform); background-color: var(--awb-bg-color-hover);\"><a href=\"https:\/\/www.prover.com\/services\/\">Let\u2019s find out!<\/a><\/u><\/h4>\n<\/div>\n<\/div><\/div><\/div><\/div><\/div>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using HLL to solve Sudoku puzzles<\/p>\n","protected":false},"author":19,"featured_media":14931,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","inline_featured_image":false,"footnotes":""},"categories":[156],"tags":[],"class_list":["post-2532","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-modeling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World<\/title>\n<meta name=\"description\" content=\"Using HLL to solve Sudoku puzzles\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World\" \/>\n<meta property=\"og:description\" content=\"Using HLL to solve Sudoku puzzles\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\" \/>\n<meta property=\"og:site_name\" content=\"Prover - Engineering a Safer World\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-10T09:37:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-08T15:23:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Lars Helander\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lars Helander\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\"},\"author\":{\"name\":\"Lars Helander\",\"@id\":\"https:\/\/prover.com\/#\/schema\/person\/7afa347c0be670180ab307394aa94a31\"},\"headline\":\"Using HLL to solve Sudoku puzzles\",\"datePublished\":\"2019-07-10T09:37:45+00:00\",\"dateModified\":\"2025-01-08T15:23:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\"},\"wordCount\":789,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/prover.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp\",\"articleSection\":[\"Modeling\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\",\"url\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\",\"name\":\"Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World\",\"isPartOf\":{\"@id\":\"https:\/\/prover.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp\",\"datePublished\":\"2019-07-10T09:37:45+00:00\",\"dateModified\":\"2025-01-08T15:23:16+00:00\",\"description\":\"Using HLL to solve Sudoku puzzles\",\"breadcrumb\":{\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage\",\"url\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp\",\"contentUrl\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp\",\"width\":1200,\"height\":675,\"caption\":\"Prover\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.prover.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modeling\",\"item\":\"https:\/\/www.prover.com\/categories\/modeling\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Using HLL to solve Sudoku puzzles\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/prover.com\/#website\",\"url\":\"https:\/\/prover.com\/\",\"name\":\"Prover - Engineering a Safer World\",\"description\":\"Interlocking Design Automation to meet demand for complex digital train control\",\"publisher\":{\"@id\":\"https:\/\/prover.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/prover.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/prover.com\/#organization\",\"name\":\"Prover - Engineering a Safer World\",\"url\":\"https:\/\/prover.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prover.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/01\/prover-logo.svg\",\"contentUrl\":\"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/01\/prover-logo.svg\",\"width\":222,\"height\":22,\"caption\":\"Prover - Engineering a Safer World\"},\"image\":{\"@id\":\"https:\/\/prover.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/prover.com\/#\/schema\/person\/7afa347c0be670180ab307394aa94a31\",\"name\":\"Lars Helander\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g\",\"caption\":\"Lars Helander\"},\"url\":\"https:\/\/www.prover.com\/author\/lars-helander\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World","description":"Using HLL to solve Sudoku puzzles","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/","og_locale":"en_US","og_type":"article","og_title":"Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World","og_description":"Using HLL to solve Sudoku puzzles","og_url":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/","og_site_name":"Prover - Engineering a Safer World","article_published_time":"2019-07-10T09:37:45+00:00","article_modified_time":"2025-01-08T15:23:16+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp","type":"image\/webp"}],"author":"Lars Helander","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lars Helander","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#article","isPartOf":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/"},"author":{"name":"Lars Helander","@id":"https:\/\/prover.com\/#\/schema\/person\/7afa347c0be670180ab307394aa94a31"},"headline":"Using HLL to solve Sudoku puzzles","datePublished":"2019-07-10T09:37:45+00:00","dateModified":"2025-01-08T15:23:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/"},"wordCount":789,"commentCount":0,"publisher":{"@id":"https:\/\/prover.com\/#organization"},"image":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage"},"thumbnailUrl":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp","articleSection":["Modeling"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/","url":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/","name":"Using HLL to solve Sudoku puzzles - Prover - Engineering a Safer World","isPartOf":{"@id":"https:\/\/prover.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage"},"image":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage"},"thumbnailUrl":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp","datePublished":"2019-07-10T09:37:45+00:00","dateModified":"2025-01-08T15:23:16+00:00","description":"Using HLL to solve Sudoku puzzles","breadcrumb":{"@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#primaryimage","url":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp","contentUrl":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/04\/Prover-logo-blue.webp","width":1200,"height":675,"caption":"Prover"},{"@type":"BreadcrumbList","@id":"https:\/\/www.prover.com\/modeling\/using-hll-to-solve-sudoku-puzzles\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.prover.com\/"},{"@type":"ListItem","position":2,"name":"Modeling","item":"https:\/\/www.prover.com\/categories\/modeling\/"},{"@type":"ListItem","position":3,"name":"Using HLL to solve Sudoku puzzles"}]},{"@type":"WebSite","@id":"https:\/\/prover.com\/#website","url":"https:\/\/prover.com\/","name":"Prover - Engineering a Safer World","description":"Interlocking Design Automation to meet demand for complex digital train control","publisher":{"@id":"https:\/\/prover.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/prover.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/prover.com\/#organization","name":"Prover - Engineering a Safer World","url":"https:\/\/prover.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prover.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/01\/prover-logo.svg","contentUrl":"https:\/\/www.prover.com\/wp-content\/uploads\/2023\/01\/prover-logo.svg","width":222,"height":22,"caption":"Prover - Engineering a Safer World"},"image":{"@id":"https:\/\/prover.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/prover.com\/#\/schema\/person\/7afa347c0be670180ab307394aa94a31","name":"Lars Helander","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b3a26551721210b3502d38129d761755bce4231c76607e8da88f4fd83ea4f5a?s=96&d=mm&r=g","caption":"Lars Helander"},"url":"https:\/\/www.prover.com\/author\/lars-helander\/"}]}},"_links":{"self":[{"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/posts\/2532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/comments?post=2532"}],"version-history":[{"count":3,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/posts\/2532\/revisions"}],"predecessor-version":[{"id":20732,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/posts\/2532\/revisions\/20732"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/media\/14931"}],"wp:attachment":[{"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/media?parent=2532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/categories?post=2532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.prover.com\/wp-json\/wp\/v2\/tags?post=2532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}