{"id":31598261,"url":"https://github.com/endjin/z3.linq","last_synced_at":"2025-10-06T05:38:36.050Z","repository":{"id":43033544,"uuid":"431080329","full_name":"endjin/Z3.Linq","owner":"endjin","description":"LINQ bindings for the Z3 theorem prover from Microsoft Research.","archived":false,"fork":false,"pushed_at":"2025-07-23T02:51:08.000Z","size":490,"stargazers_count":39,"open_issues_count":9,"forks_count":3,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-10-02T04:54:55.815Z","etag":null,"topics":["dotnet","linq","z3"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/endjin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-23T11:49:44.000Z","updated_at":"2025-07-24T21:51:25.000Z","dependencies_parsed_at":"2023-02-13T04:46:00.351Z","dependency_job_id":"2fa9f8d3-091f-4d29-8219-5a1110c3ad62","html_url":"https://github.com/endjin/Z3.Linq","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/endjin/Z3.Linq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endjin%2FZ3.Linq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endjin%2FZ3.Linq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endjin%2FZ3.Linq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endjin%2FZ3.Linq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/endjin","download_url":"https://codeload.github.com/endjin/Z3.Linq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endjin%2FZ3.Linq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278562483,"owners_count":26007196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","linq","z3"],"created_at":"2025-10-06T05:38:32.555Z","updated_at":"2025-10-06T05:38:36.034Z","avatar_url":"https://github.com/endjin.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Z3.Linq\n\n.NET 8.0 LINQ bindings for the [Z3 theorem prover](https://github.com/Z3Prover/z3) from [Microsoft Research](https://www.microsoft.com/en-us/research/). \n\nBased on the proof of concept by [Bart De Smet](https://github.com/bartdesmet) which was curated into [Z3.LinqBinding](https://github.com/RicardoNiepel/Z3.LinqBinding) by [Ricardo Niepel](https://github.com/RicardoNiepel).\n\n## Examples\n\nA number of examples are included in this solution, which you can run [from .NET Interactive](examples/z3-problems.dib) (requires [Visual Studio Code](https://code.visualstudio.com/)) or [from Visual Studio](solutions/Z3.Linq.Demo/Program.cs).\n\n### Problem - 1st Order Propositional Logic\n\nProvide a solution where either X is true or Y is true, but not both (using a [ValueTuple](https://docs.microsoft.com/en-us/dotnet/api/system.valuetuple?view=net-6.0)).\n\n```csharp\nusing (var ctx = new Z3Context())\n{\n    var theorem = from t in ctx.NewTheorem\u003c(bool x, bool y)\u003e()\n                  where t.x ^ t.y\n                  select t;\n\n    var result = theorem.Solve();\n\n    Console.WriteLine(result);\n}\n```\n\n### Problem - Linear Algebra\n\nSolve the following system with 3 variables, with linear equalities and inequalities:\n\n$$\nx_1 - x_2 \\ge 1\n\\\\\nx_1 - x_2 \\le 3\n\\\\\nx_1 = 2x_3 + x_2\n$$\n\n```csharp\nusing (var ctx = new Z3Context())\n{\n    var theorem = from t in ctx.NewTheorem\u003cSymbols\u003cint, int, int\u003e\u003e()\n                  where t.X1 - t.X2 \u003e= 1\n                  where t.X1 - t.X2 \u003c= 3\n                  where t.X1 == (2 * t.X3) + t.X2\n                  select t;\n\n    var result = theorem.Solve();\n\n    Console.WriteLine(result);\n}\n```\n\n### Problem - Price Optimised Oil Purchasing\n\nIn this example, we have two  countries that produce crude oil which we refine into three end-products: gasoline, jet fuel, and lubricant. The crude oil from each country yields different quantities of end-products once the oil is refined:\n\n|            | Saudi Arabia  | Venezuela      |\n|---         | ---           | ---            |\n| Cost       | $20 / barrel  | $15 / barrel   |\n| Max Order  | 9000 barrels  | 6000 barrels   |\n| Refining % | 30% gasolene  | 40% gasolene   |\n|            | 40% jet fuel  | 20% jet fuel   |\n|            | 20% lubricant | 30% lubricant  |\n|            | 10% waste     | 10% waste      |\n\nGiven we need to produce the following volume of refined end-product:\n\n| Product   | Amount (barrels) |\n| ---       | ---              |\n| Gasolene  | 1900             |\n| Jet Fuel  | 1500             |\n| Lubricant | 500              |\n\n What is the most cost efficient purchase strategy of crude oil from Saudi Arabia and Venezuela?\n```csharp\nusing (var ctx = new Z3Context())\n{\n    var theorem = from t in ctx.NewTheorem\u003c(double sa, double vz)\u003e()\n                  where 0.3 * t.sa + 0.4 * t.vz \u003e= 1900 // Gasolene\n                  where 0.4 * t.sa + 0.2 * t.vz \u003e= 1500 // Jet fuel\n                  where 0.2 * t.sa + 0.3 * t.vz \u003e= 500  // Lubricant\n                  where 0 \u003c= t.sa \u0026\u0026 t.sa \u003c= 9000 // Max # barrels we can purchase\n                  where 0 \u003c= t.vz \u0026\u0026 t.vz \u003c= 6000 // Max # barrels we can purchase\n                  orderby (20.0 * t.sa) + (15.0 * t.vz) // Optimize for cost\n                  select t;\n\n    var result = theorem.Solve();\n    \n    Console.WriteLine($\"SA: {result.sa} barrels (${result.sa * 20}), VZ: {result.vz} barrels (${result.vz * 15})\");\n}\n```\n\n### Problem - Minimizing Shipping Costs\n\nIn this example, you want to minimize the cost of shipping goods from 2 different warehouses to 4 different customers. Each warehouse has a limited supply and each customer has a certain demand.\n\nCost of shipping ($ per product):\n|             | Customer 1 | Customer 2 | Customer 3 | Customer 4 |\n|-------------|------------|------------|------------|------------|\n| Warehouse 1 | $1.00      | $3.00      | $0.50      | $4.00      |\n| Warehouse 2 | $2.50      | $5.00      | $1.50      | $2.50      |\n\nNumber of products shipped:\n|                     | Customer 1 | Customer 2  | Customer 3 | Customer 4 | Total shipped |    | Available |\n|---------------------|------------|-------------|------------|------------|---------------|----|-----------|\n| Warehouse 1         | 0          | 13,000      | 15,000     | 32,000     | 60,000        | \u003c= | 60,000    |\n| Warehouse 2         | 30,000     | 10,000      | 0          | 0          | 40,000        | \u003c= | 80,000    |\n| Total received      | 30,000     | 23,000      | 15,000     | 32,000     |               |    |           |\n| Ordered             | 35,000     | 22,000      | 18,000     | 30,000     |               |    |           |\n| Total Shipping Cost |            | $299,500.00 |            |            |               |    |           |\n\n1. The objective is to minimize the cost (Total Shipping Cost).\n2. The variables are the number of products to ship from each warehouse to each customer.\n3. The constraints are the number of products ordered and the number of products available in each warehouse.\n\n```csharp\nusing (var ctx = new Z3Context())\n{\n    var theorem =\n        from t in ctx.NewTheorem\u003c(double w1c1, double w1c2, double w1c3, double w1c4, double w2c1, double w2c2, double w2c3, double w2c4)\u003e()\n        where t.w1c1 + t.w1c2 + t.w1c3 + t.w1c4 \u003c= 60_000 // Warehouse 1 Product Availability\n        where t.w2c1 + t.w2c2 + t.w2c3 + t.w2c4 \u003c= 80_000 // Warehouse 2 Product Availability\n        where t.w1c1 + t.w2c1 == 35_000 \u0026\u0026 (t.w1c1 \u003e= 0 \u0026\u0026 t.w2c1 \u003e= 0) // Customer 1 Orders\n        where t.w1c2 + t.w2c2 == 22_000 \u0026\u0026 (t.w1c2 \u003e= 0 \u0026\u0026 t.w2c2 \u003e= 0) // Customer 2 Orders\n        where t.w1c3 + t.w2c3 == 18_000 \u0026\u0026 (t.w1c3 \u003e= 0 \u0026\u0026 t.w2c3 \u003e= 0) // Customer 3 Orders\n        where t.w1c4 + t.w2c4 == 30_000 \u0026\u0026 (t.w1c4 \u003e= 0 \u0026\u0026 t.w2c4 \u003e= 0) // Customer 4 Orders\n        orderby (1.00 * t.w1c1) + (3.00 * t.w1c2) + (0.50 * t.w1c3) + (4.00 * t.w1c4) +\n                (2.50 * t.w2c1) + (5.00 * t.w2c2) + (1.50 * t.w2c3) + (2.50 * t.w2c4) // Optimize for Total Shipping Cost\n        select t;\n\n    var result = theorem.Solve();\n\n    Console.WriteLine($\"|                     | Customer 1 | Customer 2  | Customer 3 | Customer 4 |\");\n    Console.WriteLine($\"|---------------------|------------|-------------|------------|------------|\");\n    Console.WriteLine($\"| Warehouse 1         | {result.w1c1}      | {result.w1c2}       |  {result.w1c3}      | {result.w1c4}          |\");\n    Console.WriteLine($\"| Warehouse 2         | {result.w2c1}          | {result.w2c2}           | {result.w2c3}      | {result.w2c4}      |\");\n    Console.WriteLine();\n    Console.WriteLine(string.Create(CultureInfo.CreateSpecificCulture(\"en-US\"), $\"Total Cost: {1.00 * result.w1c1 + 3.00 * result.w1c2 + 0.50 * result.w1c3 + 4.00 * result.w1c4 + 2.50 * result.w2c1 + 5.00 * result.w2c2 + 1.50 * result.w2c3 + 2.50 * result.w2c4:C}\"));\n}\n```\n\n## Getting Started\n\nYou can install the [Z3.Linq NuGet Package](https://www.nuget.org/packages/Z3.Linq/).\n\n### For Polyglot Notebooks\n\nAdd the package:\n```\n#r \"nuget:Z3.Linq\"\n```\nThen add the following using statements:\n\n```csharp\nusing System;\nusing Z3.Linq;\n```\nThen you can copy any of the above samples.\n\n### For Visual Studio\n\nAdd the `Z3.Linq` package.\nConfigure your application to [target x64 platform](https://docs.microsoft.com/en-us/visualstudio/ide/how-to-configure-projects-to-target-platforms?view=vs-2022). This is a requirement as `Z3.Linq` uses the [Microsoft.Z3](https://www.nuget.org/packages/Microsoft.Z3/) package.\n\n## Contributing\n\nThere are a number of ways in which you could contribute to this project:\n\n- Create new examples!\n- Improve the documentation.\n- Report / fix bugs.\n- Suggest any implementation improvements or optimizations.\n- Blog about the project!\n\nAll PRs are welcome.\n\n## History\n\n2009: [Bart De Smet](https://github.com/bartdesmet) describes a prototype LINQ to Z3 binding in three blog posts:\n\n* [LINQ to Z3 - Part 1 – Exploring The Z3 Theorem Prover](docs/blogs/part-01-exploring-the-z3-theorem-prover.md)\n* [LINQ to Z3 - Part 2 – LINQ to the Unexpected](docs/blogs/part-02-linq-to-the-unexpected.md)\n* [LINQ to Z3 - Part 3 – Theorem Solving On Steroids](docs/blogs/part-03-theorem-solving-on-steroids.md)\n\n2010: Bart was [interviewed on Channel 9](https://vimeo.com/648767290) about the LINQ to Z3 concept:\n\n[![LINQ to Z3 Channel 9 interview](docs/blogs/images/linq-to-z3-channel9.jpg)](https://vimeo.com/648767290)\n\n2012: Bart presented [LINQ to Everything](https://vimeo.com/648776168) at TechEd Europe 2012:\n\n[![LINQ to Everything](docs/blogs/images/linq-to-constraints.jpg)](https://vimeo.com/648776168)\n\n2015: Z3 was open sourced under the MIT license and the [source code was moved to GitHub](https://github.com/Z3Prover/z3), where it is actively maintained.\n\n2015: [Ricardo Niepel](https://github.com/RicardoNiepel) (Microsoft) publishes the sample as [Z3.LinqBinding](https://github.com/RicardoNiepel/Z3.LinqBinding) using `.NET 4.5` and Z3 binaries `4.4.0`\n\n2018: [Jean-Sylvain Boige](https://github.com/jsboige) ([My Intelligence Agency](https://github.com/MyIntelligenceAgency)) adds [Missionaries And Cannibals sample](https://github.com/MyIntelligenceAgency/Z3.LinqBinding).\n\n2020: [Karel Frajtak](https://github.com/kfrajtak) adds [support for fractions](https://github.com/kfrajtak/Z3.LinqBinding).\n\n2021: [Howard van Rooijen](https://github.com/HowardvanRooijen) and [Ian Griffiths](https://github.com/idg10) ([endjin](https://github.com/endjin)) upgrade the project to `.NET 6.0`, added `Optimize` support via LINQ's `OrderBy`, [ValueTuple](https://docs.microsoft.com/en-us/dotnet/api/system.valuetuple?view=net-6.0) support, demonstrate using `record` types, and fix nullability issues. They upgraded the solution to use [Z3 NuGet package](https://www.nuget.org/packages/Microsoft.Z3.x64/), merged in features from [Jean-Sylvain Boige](https://github.com/jsboige) and [Karel Frajtak](https://github.com/kfrajtak) forks, created archives of Bart's original blog posts and talks. They republished the project as [Z3.Linq](https://github.com/endjin/Z3.Linq), created a new [Polyglot Notebook](https://github.com/dotnet/interactive) of [samples](examples/z3-problems.dib), and published a NuGet package [Z3.Linq](https://www.nuget.org/packages/Z3.Linq/).\n\n2023: [Whit Waldo](https://github.com/WhitWaldo) upgrades the project to `.NET 8.0`\n\n## Project Sponsor\n\nThis project is sponsored by [endjin](https://endjin.com), a UK based Technology Consultancy which specializes in Data, AI, DevOps \u0026 Cloud, and is a [.NET Foundation Corporate Sponsor](https://dotnetfoundation.org/membership/corporate-sponsorship).\n\n\u003e We help small teams achieve big things.\n\nWe produce two free weekly newsletters: \n\n - [Azure Weekly](https://azureweekly.info) for all things about the Microsoft Azure Platform\n - [Power BI Weekly](https://powerbiweekly.info) for all things Power BI, Microsoft Fabric, and Azure Synapse Analytics\n\nKeep up with everything that's going on at endjin via our [blog](https://endjin.com/blog), follow us on [Twitter](https://twitter.com/endjin), [YouTube](https://www.youtube.com/c/endjin) or [LinkedIn](https://www.linkedin.com/company/endjin).\n\nWe have become the maintainers of a number of popular .NET Open Source Projects:\n\n- [Reactive Extensions for .NET](https://github.com/dotnet/reactive)\n- [Reaqtor](https://github.com/reaqtive)\n- [Argotic Syndication Framework](https://github.com/argotic-syndication-framework/)\n\nAnd we have over 50 Open Source projects of our own, spread across the following GitHub Orgs:\n\n- [endjin](https://github.com/endjin/)\n- [Corvus](https://github.com/corvus-dotnet)\n- [Menes](https://github.com/menes-dotnet)\n- [Marain](https://github.com/marain-dotnet)\n- [AIS.NET](https://github.com/ais-dotnet)\n\nAnd the DevOps tooling we have created for managing all these projects is available on the [PowerShell Gallery](https://www.powershellgallery.com/profiles/endjin).\n\nFor more information about our products and services, or for commercial support of this project, please [contact us](https://endjin.com/contact-us). \n\n## Code of conduct\n\nThis project has adopted a code of conduct adapted from the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behavior in our community. This code of conduct has been [adopted by many other projects](http://contributor-covenant.org/adopters/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [\u0026#104;\u0026#101;\u0026#108;\u0026#108;\u0026#111;\u0026#064;\u0026#101;\u0026#110;\u0026#100;\u0026#106;\u0026#105;\u0026#110;\u0026#046;\u0026#099;\u0026#111;\u0026#109;](\u0026#109;\u0026#097;\u0026#105;\u0026#108;\u0026#116;\u0026#111;:\u0026#104;\u0026#101;\u0026#108;\u0026#108;\u0026#111;\u0026#064;\u0026#101;\u0026#110;\u0026#100;\u0026#106;\u0026#105;\u0026#110;\u0026#046;\u0026#099;\u0026#111;\u0026#109;) with any additional questions or comments.\n\n## IP Maturity Model (IMM)\n\nThe [IP Maturity Model](https://github.com/endjin/Endjin.Ip.Maturity.Matrix) is endjin's IP quality assessment framework, which we've developed over a number of years when doing due diligence assessments of 3rd party systems. We've codified the approach into a [configurable set of rules](https://github.com/endjin/Endjin.Ip.Maturity.Matrix.RuleDefinitions), which are committed into the [root of a repo](imm.yaml), and a [Azure Function HttpTrigger](https://github.com/endjin/Endjin.Ip.Maturity.Matrix/tree/main/Solutions/Endjin.Ip.Maturity.Matrix.Host) HTTP endpoint which can evaluate the ruleset, and render an svg badge for display in repo's `readme.md`.\n\n## IP Maturity Model Scores\n\n[![Shared Engineering Standards](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/74e29f9b-6dca-4161-8fdd-b468a1eb185d?nocache=true)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/74e29f9b-6dca-4161-8fdd-b468a1eb185d?cache=false)\n\n[![Coding Standards](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/f6f6490f-9493-4dc3-a674-15584fa951d8?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/f6f6490f-9493-4dc3-a674-15584fa951d8?cache=false)\n\n[![Executable Specifications](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/bb49fb94-6ab5-40c3-a6da-dfd2e9bc4b00?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/bb49fb94-6ab5-40c3-a6da-dfd2e9bc4b00?cache=false)\n\n[![Code Coverage](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/0449cadc-0078-4094-b019-520d75cc6cbb?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/0449cadc-0078-4094-b019-520d75cc6cbb?cache=false)\n\n[![Benchmarks](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/64ed80dc-d354-45a9-9a56-c32437306afa?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/64ed80dc-d354-45a9-9a56-c32437306afa?cache=false)\n\n[![Reference Documentation](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/2a7fc206-d578-41b0-85f6-a28b6b0fec5f?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/2a7fc206-d578-41b0-85f6-a28b6b0fec5f?cache=false)\n\n[![Design \u0026 Implementation Documentation](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/f026d5a2-ce1a-4e04-af15-5a35792b164b?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/f026d5a2-ce1a-4e04-af15-5a35792b164b?cache=false)\n\n[![How-to Documentation](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/145f2e3d-bb05-4ced-989b-7fb218fc6705?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/145f2e3d-bb05-4ced-989b-7fb218fc6705?cache=false)\n\n[![Date of Last IP Review](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/da4ed776-0365-4d8a-a297-c4e91a14d646?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/da4ed776-0365-4d8a-a297-c4e91a14d646?cache=false)\n\n[![Framework Version](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/6c0402b3-f0e3-4bd7-83fe-04bb6dca7924?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/6c0402b3-f0e3-4bd7-83fe-04bb6dca7924?cache=false)\n\n[![Associated Work Items](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/79b8ff50-7378-4f29-b07c-bcd80746bfd4?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/79b8ff50-7378-4f29-b07c-bcd80746bfd4?cache=false)\n\n[![Source Code Availability](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/30e1b40b-b27d-4631-b38d-3172426593ca?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/30e1b40b-b27d-4631-b38d-3172426593ca?cache=false)\n\n[![License](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/d96b5bdc-62c7-47b6-bcc4-de31127c08b7?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/d96b5bdc-62c7-47b6-bcc4-de31127c08b7?cache=false)\n\n[![Production Use](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/87ee2c3e-b17a-4939-b969-2c9c034d05d7?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/87ee2c3e-b17a-4939-b969-2c9c034d05d7?cache=false)\n\n[![Insights](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/71a02488-2dc9-4d25-94fa-8c2346169f8b?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/71a02488-2dc9-4d25-94fa-8c2346169f8b?cache=false)\n\n[![Packaging](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/547fd9f5-9caf-449f-82d9-4fba9e7ce13a?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/547fd9f5-9caf-449f-82d9-4fba9e7ce13a?cache=false)\n\n[![Deployment](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/edea4593-d2dd-485b-bc1b-aaaf18f098f9?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/edea4593-d2dd-485b-bc1b-aaaf18f098f9?cache=false)\n\n[![OpenChain](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/66efac1a-662c-40cf-b4ec-8b34c29e9fd7?cache=false)](https://imm.endjin.com/api/imm/github/endjin/Z3.Linq/rule/66efac1a-662c-40cf-b4ec-8b34c29e9fd7?cache=false)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendjin%2Fz3.linq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fendjin%2Fz3.linq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendjin%2Fz3.linq/lists"}