From e91a60ccde1f52b4bbd32e5955447372fd6d31ce Mon Sep 17 00:00:00 2001 From: NikolajBjorner Date: Thu, 6 Jun 2024 09:37:05 +0000 Subject: [PATCH] deploy: 4333097e04327dff31664884ec20b1ee1f85cd7b --- 404.html | 10 +++++----- Acknowledgments/index.html | 10 +++++----- .../{758a6945.be08cdf9.js => 758a6945.58961a49.js} | 2 +- assets/js/{main.c7a956ee.js => main.816cd80b.js} | 4 ++-- ...e.js.LICENSE.txt => main.816cd80b.js.LICENSE.txt} | 0 ...ime~main.5aea6765.js => runtime~main.b7f9c7b0.js} | 2 +- docs/fixedpoints/basicdatalog/index.html | 10 +++++----- docs/fixedpoints/engineforpdr/index.html | 10 +++++----- docs/fixedpoints/intro/index.html | 10 +++++----- docs/fixedpoints/syntax/index.html | 10 +++++----- docs/logic/Conclusion/index.html | 10 +++++----- docs/logic/Lambdas/index.html | 10 +++++----- docs/logic/Quantifiers/index.html | 10 +++++----- docs/logic/Recursive Functions/index.html | 10 +++++----- .../Uninterpreted-functions-and-constants/index.html | 10 +++++----- docs/logic/basiccommands/index.html | 10 +++++----- docs/logic/intro/index.html | 10 +++++----- docs/logic/propositional-logic/index.html | 10 +++++----- docs/optimization/advancedtopics/index.html | 10 +++++----- docs/optimization/apioptimization/index.html | 10 +++++----- .../optimization/arithmeticaloptimization/index.html | 10 +++++----- docs/optimization/asmallcasestudy/index.html | 10 +++++----- docs/optimization/combiningobjectives/index.html | 10 +++++----- docs/optimization/intro/index.html | 10 +++++----- docs/optimization/softconstraints/index.html | 10 +++++----- docs/strategies/goals/index.html | 10 +++++----- docs/strategies/intro/index.html | 10 +++++----- docs/strategies/probes/index.html | 10 +++++----- docs/strategies/simplifiers-summary/index.html | 10 +++++----- docs/strategies/simplifiers/index.html | 10 +++++----- docs/strategies/summary/index.html | 10 +++++----- docs/strategies/tactics/index.html | 10 +++++----- docs/theories/Arithmetic/index.html | 10 +++++----- docs/theories/Arrays/index.html | 10 +++++----- docs/theories/Bitvectors/index.html | 10 +++++----- docs/theories/Characters/index.html | 10 +++++----- docs/theories/Datatypes/index.html | 12 ++++++------ docs/theories/IEEE Floats/index.html | 10 +++++----- docs/theories/Regular Expressions/index.html | 10 +++++----- docs/theories/Sequences/index.html | 10 +++++----- docs/theories/Special Relations/index.html | 10 +++++----- docs/theories/Strings/index.html | 10 +++++----- index.html | 10 +++++----- playground/Freeform Editing/index.html | 10 +++++----- playground/Guess the Secret Formula/index.html | 10 +++++----- playground/test/index.html | 10 +++++----- programming/API Reference/index.html | 10 +++++----- .../Cores and Satisfying Subsets/index.html | 10 +++++----- .../Formula Simplification/index.html | 10 +++++----- programming/Example Programs/MBQI/index.html | 10 +++++----- programming/Example Programs/SPACER/index.html | 10 +++++----- .../Example Programs/User Propagator/index.html | 10 +++++----- programming/Parameters/index.html | 10 +++++----- programming/Proof Logs/index.html | 10 +++++----- programming/Z3 JavaScript Examples/index.html | 10 +++++----- .../Z3 Python - Readonly/Fixedpoints/index.html | 10 +++++----- .../Z3 Python - Readonly/Introduction/index.html | 10 +++++----- .../Z3 Python - Readonly/Strategies/index.html | 10 +++++----- programming/Z3 Python - Readonly/advanced/index.html | 10 +++++----- search/index.html | 10 +++++----- 60 files changed, 285 insertions(+), 285 deletions(-) rename assets/js/{758a6945.be08cdf9.js => 758a6945.58961a49.js} (56%) rename assets/js/{main.c7a956ee.js => main.816cd80b.js} (99%) rename assets/js/{main.c7a956ee.js.LICENSE.txt => main.816cd80b.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.5aea6765.js => runtime~main.b7f9c7b0.js} (99%) diff --git a/404.html b/404.html index cf380a1f2..d5cc4299d 100644 --- a/404.html +++ b/404.html @@ -12,13 +12,13 @@ Page Not Found | Online Z3 Guide - - + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/Acknowledgments/index.html b/Acknowledgments/index.html index 41dfe0d29..0ca0977e8 100644 --- a/Acknowledgments/index.html +++ b/Acknowledgments/index.html @@ -12,13 +12,13 @@ Acknowledgements | Online Z3 Guide - - + +
-
Skip to main content

Acknowledgments

The z3guide was created by

  • Ruanqianqian (Lisa) Huang, UCSD, MSR Intern
  • Ayana Monroe, UNC, MSR Intern
  • Nikolaj Bjørner, Peli de Halleux, Microsoft Research

It relies on extensive help and use of the JavaScript bindings created by

  • Kevin Bakkot, Olaf Tomalka

with earlier wasm bindings by Leonardo Alt, Phillip Zucker, and Clément Pit-Claudel.

Material is based on an earlier rise4fun tutorial by Leonardo de Moura and Christoph Wintersteiger.

- - +
Skip to main content

Acknowledgments

The z3guide was created by

  • Ruanqianqian (Lisa) Huang, UCSD, MSR Intern
  • Ayana Monroe, UNC, MSR Intern
  • Nikolaj Bjørner, Peli de Halleux, Microsoft Research

It relies on extensive help and use of the JavaScript bindings created by

  • Kevin Bakkot, Olaf Tomalka

with earlier wasm bindings by Leonardo Alt, Phillip Zucker, and Clément Pit-Claudel.

Material is based on an earlier rise4fun tutorial by Leonardo de Moura and Christoph Wintersteiger.

+ + \ No newline at end of file diff --git a/assets/js/758a6945.be08cdf9.js b/assets/js/758a6945.58961a49.js similarity index 56% rename from assets/js/758a6945.be08cdf9.js rename to assets/js/758a6945.58961a49.js index a1592aee5..7592089e5 100644 --- a/assets/js/758a6945.be08cdf9.js +++ b/assets/js/758a6945.58961a49.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7688],{8486:(a,e,n)=>{n.r(e),n.d(e,{assets:()=>g,contentTitle:()=>l,default:()=>c,frontMatter:()=>p,metadata:()=>i,toc:()=>o});var s=n(8168),t=(n(6540),n(5680)),m=n(2317),r=n.n(m);const p={title:"Datatypes",sidebar_position:5},l=void 0,i={unversionedId:"theories/Datatypes",id:"theories/Datatypes",title:"Datatypes",description:"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures.",source:"@site/docs-smtlib/02 - theories/05 - Datatypes.md",sourceDirName:"02 - theories",slug:"/theories/Datatypes",permalink:"/z3guide/docs/theories/Datatypes",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/02 - theories/05 - Datatypes.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Datatypes",sidebar_position:5},sidebar:"smtlibSidebar",previous:{title:"Arrays",permalink:"/z3guide/docs/theories/Arrays"},next:{title:"Strings",permalink:"/z3guide/docs/theories/Strings"}},g={},o=[{value:"Records",id:"records",level:3},{value:"Record Updates",id:"record-updates",level:3},{value:"Scalars (enumeration types)",id:"scalars-enumeration-types",level:3},{value:"Recursive datatypes",id:"recursive-datatypes",level:3},{value:"Mutually recursive datatypes",id:"mutually-recursive-datatypes",level:3},{value:"Z3 will not prove inductive facts",id:"z3-will-not-prove-inductive-facts",level:3},{value:"Nested datatypes with Arrays and Sequences",id:"nested-datatypes-with-arrays-and-sequences",level:3},{value:"Using Datatypes for solving type constraints",id:"using-datatypes-for-solving-type-constraints",level:2},{value:"Checking if terms have principal types",id:"checking-if-terms-have-principal-types",level:4},{value:"Using UNSAT cores to identify mutually inconsistent type constraints",id:"using-unsat-cores-to-identify-mutually-inconsistent-type-constraints",level:3},{value:"Using optimization to localize type errors",id:"using-optimization-to-localize-type-errors",level:3}],y={toc:o},N="wrapper";function c(a){let{components:e,...n}=a;return(0,t.yg)(N,(0,s.A)({},y,n,{components:e,mdxType:"MDXLayout"}),(0,t.yg)("p",null,"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures."),(0,t.yg)("h3",{id:"records"},"Records"),(0,t.yg)("p",null,"A record is specified as a datatype with a single constructor and as many arguments as record elements. The number of arguments to a record are always the same. The type system does not allow to extend records and there is no record subtyping."),(0,t.yg)("p",null,"The following example illustrates that two records are equal only if all the arguments are equal. It introduces the parametric type Pair, with constructor mk-pair and two arguments that can be accessed using the selector functions first and second."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2)))))\n(declare-const p1 (Pair Int Int))\n(declare-const p2 (Pair Int Int))\n(assert (= p1 p2))\n(assert (< (second p1) 20))\n(check-sat)\n(get-model)\n(assert (not (= (first p1) (first p2))))\n(check-sat)",result:{output:"sat\n(\n (define-fun p2 () (Pair Int Int)\n (mk-pair 0 19))\n (define-fun p1 () (Pair Int Int)\n (mk-pair 0 19))\n)\nunsat\n",error:"",status:"z3-ran",hash:"1158221f1865c9d072fed54e5e5d2457e1a763a9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"record-updates"},"Record Updates"),(0,t.yg)("p",null,"You can create variants of records by updating selected fields."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2)))))\n(declare-const p1 (Pair Int Int))\n(declare-const p2 (Pair Int Int))\n(assert (not (= p1 p2)))\n(assert (= p1 ((_ update-field first) p2 1)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun p2 () (Pair Int Int)\n (mk-pair 2 3))\n (define-fun p1 () (Pair Int Int)\n (mk-pair 1 3))\n)\n",error:"",status:"z3-ran",hash:"e3c62e0af5a7999fe6ff653d3f947e983a1c213b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"scalars-enumeration-types"},"Scalars (enumeration types)"),(0,t.yg)("p",null,"A scalar sort is a finite domain sort. The elements of the finite domain are enumerated as distinct constants. For example, the sort S is a scalar type with three values A, B and C. It is possible for three constants of sort S to be distinct, but not for four constants."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes () ((S A B C)))\n(declare-const x S)\n(declare-const y S)\n(declare-const z S)\n(declare-const u S)\n(assert (distinct x y z))\n(check-sat)\n(assert (distinct x y z u))\n(check-sat)",result:{output:"sat\nunsat\n",error:"",status:"z3-ran",hash:"a788e2348e47f042d3bcc308a009902a4b45157d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"recursive-datatypes"},"Recursive datatypes"),(0,t.yg)("p",null,"A recursive datatype declaration includes itself directly (or indirectly) as a component. A standard example of a recursive data-type is the one of lists. A parametric list can be specified in Z3 as"),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T) ((Lst nil (cons (hd T) (tl Lst)))))\n(declare-const l1 (Lst Int))\n(declare-const l2 (Lst Bool))",result:{output:"",error:"",status:"z3-ran",hash:"867a153dea27c625c5b857d0e86a488e10653e66"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"The List recursive datatype is builtin in Z3. The empty list is nil, and the constructor insert is used to build new lists. The accessors head and tail are defined as usual."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const l1 (List Int))\n(declare-const l2 (List Int))\n(declare-const l3 (List Int))\n(declare-const x Int)\n(assert (not (= l1 nil)))\n(assert (not (= l2 nil)))\n(assert (= (head l1) (head l2)))\n(assert (not (= l1 l2)))\n(assert (= l3 (insert x l2)))\n(assert (< x 100))\n(check-sat)\n(get-model)\n(assert (= (tail l1) (tail l2)))\n(check-sat)",result:{output:"sat\n(\n (define-fun l1 () (List Int)\n (insert 2 nil))\n (define-fun x () Int\n 99)\n (define-fun l2 () (List Int)\n (insert 2 (insert 3 nil)))\n (define-fun l3 () (List Int)\n (insert 99 (insert 2 (insert 3 nil))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"75fd8affa26822db05bcb71b6c0d8439629312e4"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"In the example above, we also assert that l1 and l2 are not nil. This is because the interpretation of head and tail is under-specified on nil. So then head and tail would not be able to distinguish nil from (insert (head nil) (tail nil))."),(0,t.yg)("h3",{id:"mutually-recursive-datatypes"},"Mutually recursive datatypes"),(0,t.yg)("p",null,"You can also specify mutually recursive datatypes for Z3. We list one example below."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"; declare a mutually recursive parametric datatype\n(declare-datatypes (T) ((Tree leaf (node (value T) (children TreeList)))\n (TreeList nil (cons (car Tree) (cdr TreeList)))))\n(declare-const t1 (Tree Int))\n(declare-const t2 (Tree Bool))\n; we must use the 'as' construct to distinguish the leaf (Tree Int) from leaf (Tree Bool)\n(assert (not (= t1 (as leaf (Tree Int)))))\n(assert (< (value t1) 20))\n(assert (not (is-leaf t2)))\n(assert (not (value t2)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun t1 () (Tree Int)\n (node 0 (as nil (TreeList Int))))\n (define-fun t2 () (Tree Bool)\n (node false (as nil (TreeList Bool))))\n)\n",error:"",status:"z3-ran",hash:"1addb0a1a2076beac5633922a257a21f70806d8b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"In the example above, we have a tree of Booleans and a tree of integers. The leaf constant must return a tree of a specific sort. To specify the result sort, we use the qualified identifier (as leaf (Tree Int)). Note that, we do not need to use a qualified identifier for value, since Z3 can infer the intended declaration using the sort of the argument."),(0,t.yg)("h3",{id:"z3-will-not-prove-inductive-facts"},"Z3 will not prove inductive facts"),(0,t.yg)("p",null,"The ground decision procedures for recursive datatypes don't lift to establishing inductive facts. Z3 does not contain methods for producing proofs by induction. This may change in the future. In particular, consider the following example where the function p is true on all natural numbers, which can be proved by induction over Nat. Z3 enters a matching loop as it attempts instantiating the universally quantified implication."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :timeout 2000)\n(declare-datatypes () ((Nat zero (succ (pred Nat)))))\n(declare-fun p (Nat) Bool)\n(assert (p zero))\n(assert (forall ((x Nat)) (implies (p (pred x)) (p x))))\n(assert (not (forall ((x Nat)) (p x))))\n(check-sat)\n(get-info :all-statistics)",result:{output:"unknown\n(:added-eqs 20252\n :binary-propagations 1\n :conflicts 2893\n :datatype-accessor-ax 2894\n :datatype-constructor-ax 5786\n :datatype-occurs-check 5788\n :datatype-splits 2894\n :decisions 2893\n :final-checks 2894\n :max-generation 1\n :max-memory 18.76\n :memory 12.11\n :mk-bool-var 8684\n :mk-clause-binary 1\n :num-allocs 115737\n :num-checks 1\n :propagations 1\n :quant-instantiations 2893\n :rlimit-count 205828\n :time 2.26)\n",error:"",status:"z3-ran",hash:"47bca1e57b474d4d59b96f32de90925485336b9e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"nested-datatypes-with-arrays-and-sequences"},"Nested datatypes with Arrays and Sequences"),(0,t.yg)("p",null,"In some applications it is convenient to have a sequence of types that are\nrecursively defined. For example an abstract syntax tree of a program is a sequence of\nbasic statements, and a basic statement can be an assignment or an if-then-else statement,\nwhere the then and else branches are statements. Similarly, it may be convenient to use\na nesting of algebraic data-types and arrays. Z3 supports nesting ADTs over sequences and over\nranges of arrays."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Expr)\n(declare-sort Var)\n(declare-datatypes ((Stmt 0)) \n (((Assignment (lval Var) (rval Expr)) \n (If (cond Expr) (th Stmt) (el Stmt)) \n (Seq (stmts (Seq Stmt))))))\n\n(declare-const s Stmt)\n(declare-const t Stmt)\n\n(assert ((_ is Seq) t))\n(assert ((_ is Seq) s))\n(assert (= s (seq.nth (stmts t) 2)))\n(assert (>= (seq.len (stmts s)) 5))\n(check-sat)\n(get-model)\n(assert (= s (Seq (seq.unit s))))\n(check-sat)",result:{output:"sat\n(\n ;; universe for Expr:\n ;; Expr!val!7 Expr!val!3 Expr!val!1 Expr!val!4 Expr!val!0 Expr!val!6 Expr!val!5 Expr!val!2 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Expr!val!7 () Expr)\n (declare-fun Expr!val!3 () Expr)\n (declare-fun Expr!val!1 () Expr)\n (declare-fun Expr!val!4 () Expr)\n (declare-fun Expr!val!0 () Expr)\n (declare-fun Expr!val!6 () Expr)\n (declare-fun Expr!val!5 () Expr)\n (declare-fun Expr!val!2 () Expr)\n ;; cardinality constraint:\n (forall ((x Expr))\n (or (= x Expr!val!7)\n (= x Expr!val!3)\n (= x Expr!val!1)\n (= x Expr!val!4)\n (= x Expr!val!0)\n (= x Expr!val!6)\n (= x Expr!val!5)\n (= x Expr!val!2)))\n ;; -----------\n ;; universe for Var:\n ;; Var!val!2 Var!val!0 Var!val!3 Var!val!4 Var!val!5 Var!val!6 Var!val!7 Var!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Var!val!2 () Var)\n (declare-fun Var!val!0 () Var)\n (declare-fun Var!val!3 () Var)\n (declare-fun Var!val!4 () Var)\n (declare-fun Var!val!5 () Var)\n (declare-fun Var!val!6 () Var)\n (declare-fun Var!val!7 () Var)\n (declare-fun Var!val!1 () Var)\n ;; cardinality constraint:\n (forall ((x Var))\n (or (= x Var!val!2)\n (= x Var!val!0)\n (= x Var!val!3)\n (= x Var!val!4)\n (= x Var!val!5)\n (= x Var!val!6)\n (= x Var!val!7)\n (= x Var!val!1)))\n ;; -----------\n (define-fun t () Stmt\n (Seq (as seq.empty (Seq Stmt))))\n (define-fun s () Stmt\n (Seq (seq.++ (seq.unit (Assignment Var!val!7 Expr!val!7))\n (seq.unit (Assignment Var!val!6 Expr!val!6))\n (seq.unit (Assignment Var!val!1 Expr!val!1))\n (seq.unit (Assignment Var!val!0 Expr!val!0))\n (seq.unit (Assignment Var!val!5 Expr!val!5)))))\n (define-fun seq.nth_u ((x!0 (Seq Stmt)) (x!1 Int)) Stmt\n (Seq (seq.++ (seq.unit (Assignment Var!val!7 Expr!val!7))\n (seq.unit (Assignment Var!val!6 Expr!val!6))\n (seq.unit (Assignment Var!val!1 Expr!val!1))\n (seq.unit (Assignment Var!val!0 Expr!val!0))\n (seq.unit (Assignment Var!val!5 Expr!val!5)))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"4df670a452df5fad24a7b8bdcb06ab02e5a3c0fa"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h2",{id:"using-datatypes-for-solving-type-constraints"},"Using Datatypes for solving type constraints"),(0,t.yg)("p",null,"In the following we use algebraic datatypes to represent type constraints\nfor simply typed lambda calculus.\nTerms and types over simply typed lambda calculus are of the form"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M ::= x \\mid M M \\mid \\lambda x \\ . \\ M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"::="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"MM"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"s"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"r"),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"g"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\tau ::= int \\mid string \\mid \\tau \\rightarrow \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"::="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"))))))),(0,t.yg)("p",null,"where ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"x")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," is bound variable, ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M M'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032")))))))))))))," applies the function ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," to argument ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),", and ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\lambda x \\ . \\ M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," is a lambda abstraction.\nThe ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"t")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"int")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6595em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t")))))," and ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"s"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"r"),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"g")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"string")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.854em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g")))))," types are type constants."),(0,t.yg)("p",null,"A type judgemnt is"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"))))))),(0,t.yg)("p",null,"where ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393")))))," is a type environment that provides types to free variables in ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"))))),".\nAn expression ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," has a type ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4")))))," if there is a derivation using the rules:"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma, x : \\tau \\vdash x : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4")))))),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M : \\tau \\rightarrow \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M' : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M M' : \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),"."),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma, x : \\tau \\vdash M : \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash \\lambda x : M : \\tau \\rightarrow \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),".")),(0,t.yg)("p",null,"We can use constraints over algebraic data-types to determine if expressions can be typed. "),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M M') = Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"X"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M) = X \\rightarrow Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"X")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M') = X")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"))))),", for fresh ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"X"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"X, Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),"."),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(\\lambda x . M) = type(x) \\rightarrow type(M)")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"))))))),(0,t.yg)("h4",{id:"checking-if-terms-have-principal-types"},"Checking if terms have principal types"),(0,t.yg)("p",null,"We define types and expressions as algebraic data-types.\nThe types of applications produces three constraints for\napplications and the single constraint for lambda abstraction.\nThe encoding into SMTLIB uses several features. Besides algebraic\ndata-types it uses uninterpreted functions instead of introducing\nfresh variables. It defines a recursive function that extracts\ntype constraints from an expression. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(declare-const x Var)\n(declare-const y Var)\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1)))\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(define-fun-rec type-constraints ((M M)) Bool\n (match M\n (case (var x) true)\n (case (app M1 M2)\n (if (app-constraint M1 M2)\n (and (type-constraints M1) (type-constraints M2)) \n false))\n (case (lam x M1)\n (if (lam-constraint x M1)\n (type-constraints M1) \n false))\n )\n)\n\n; the identity function can be typed.\n(push)\n(assert (type-constraints (lam x (var x))))\n(check-sat)\n(pop)\n\n; there is no simple type for x such that (x x) is well typed.\n; the type constraints are unsat due to the semantics of algebraic\n; data-types: it is not possible to create an instance of an\n; algebraic data-type that is a sub-term of itself.\n(push)\n(assert (type-constraints (lam x (app (var x) (var x)))))\n(check-sat)\n(pop)\n\n; Applying a function that takes an integer to a string is not well-typed\n(push)\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(assert (= (type (ofint 3)) int))\n(declare-fun ofstring (String) M)\n(assert (= (type (ofstring "a")) string))\n(assert (type-constraints (app (lam x (app (app plus (var x)) (ofint 3))) (ofstring "a"))))\n(check-sat)\n(pop)',result:{output:"sat\nunsat\nunsat\n",error:"",status:"z3-ran",hash:"07e1880cf210cc66915eb18d65f82f0c21f14b26"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"using-unsat-cores-to-identify-mutually-inconsistent-type-constraints"},"Using UNSAT cores to identify mutually inconsistent type constraints"),(0,t.yg)("p",null,"We can track each sub-expression and use unsatisfiable cores to\nidentify a set of mutually inconsistent type constraints.\nWhen the core is minimial, it means that modifying any one of the\nsubterms from the corresponding violated constraints can fix the type error. This provides some indication of error location, but isn't\ngreat for diagnostics. In the next section we use MaxSAT for more\ntargeted diagnostics. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :produce-unsat-cores true)\n(set-option :smt.core.minimize true)\n(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(declare-const x Var)\n(declare-const y Var)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1))\n )\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(declare-fun ofstring (String) M)\n(define-const x_plus_3 M (app (app plus (var x)) (ofint 3)))\n\n(assert (= (type (ofint 3)) int))\n(assert (= (type (ofstring "a")) string))\n\n(assert (! (app-constraint (lam x x_plus_3) (ofstring "a")) :named t1))\n(assert (! (lam-constraint x x_plus_3) :named t2))\n(assert (! (app-constraint (app plus (var x)) (ofint 3)) :named t3))\n(assert (! (app-constraint plus (var x)) :named t4))\n(check-sat)\n(get-unsat-core)',result:{output:"unsat\n(t4 t2 t1)\n",error:"",status:"z3-ran",hash:"3f5e5890ebbcd300cff74fb18111491ede3f679b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"using-optimization-to-localize-type-errors"},"Using optimization to localize type errors"),(0,t.yg)("p",null,"By asserting each type checking condition as a soft constraint and seeking an optimized solution to satisfy as many type constraints as possible, we obtain targeted information of what sub-terms could not\nbe type checked."),(0,t.yg)("p",null,"We can read off the type annotations for remaining sub-terms using\nthe current model. Albeit, it is not a user-friendly format. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(declare-const x Var)\n(declare-const y Var)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1))\n )\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(assert (= (type (ofint 3)) int))\n(declare-fun ofstring (String) M)\n(declare-const t1 Bool)\n(declare-const t2 Bool)\n(declare-const t3 Bool)\n(declare-const t4 Bool)\n(assert (= (type (ofstring "a")) string))\n(define-const x_plus_3 M (app (app plus (var x)) (ofint 3)))\n(assert (= t1 (app-constraint (lam x x_plus_3) (ofstring "a"))))\n(assert (= t2 (lam-constraint x x_plus_3)))\n(assert (= t3 (app-constraint (app plus (var x)) (ofint 3))))\n(assert (= t4 (app-constraint plus (var x))))\n(assert-soft t1)\n(assert-soft t2)\n(assert-soft t3)\n(assert-soft t4)\n(check-sat)\n(get-objectives)\n(get-value (t1 t2 t3 t4))\n(get-model)',result:{output:"sat\n(objectives\n ( 1)\n)\n((t1 false)\n (t2 true)\n (t3 true)\n (t4 true))\n(\n ;; universe for Var:\n ;; Var!val!2 Var!val!0 Var!val!3 Var!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Var!val!2 () Var)\n (declare-fun Var!val!0 () Var)\n (declare-fun Var!val!3 () Var)\n (declare-fun Var!val!1 () Var)\n ;; cardinality constraint:\n (forall ((x Var))\n (or (= x Var!val!2) (= x Var!val!0) (= x Var!val!3) (= x Var!val!1)))\n ;; -----------\n (define-fun x_plus_3 () M\n (app (app plus (var x)) (ofint 3)))\n (define-fun plus () M\n (var Var!val!1))\n (define-fun x () Var\n Var!val!0)\n (define-fun t3 () Bool\n true)\n (define-fun t4 () Bool\n true)\n (define-fun t1 () Bool\n false)\n (define-fun t2 () Bool\n true)\n (define-fun y () Var\n Var!val!2)\n (define-fun ofstring ((x!0 String)) M\n (var Var!val!2))\n (define-fun type ((x!0 M)) Type\n (ite (= x!0 (var Var!val!1)) (arrow int (arrow int int))\n (ite (= x!0 (var Var!val!2)) string\n (ite (= x!0\n (lam Var!val!0\n (app (app (var Var!val!1) (var Var!val!0)) (var Var!val!3))))\n (arrow int int)\n (ite (= x!0\n (let ((a!1 (lam Var!val!0\n (app (app (var Var!val!1) (var Var!val!0))\n (var Var!val!3)))))\n (app a!1 (var Var!val!2))))\n (arrow (arrow int int) (arrow int int))\n (ite (= x!0 (app (var Var!val!1) (var Var!val!0))) (arrow int int)\n int))))))\n (define-fun ofint ((x!0 Int)) M\n (var Var!val!3))\n)\n",error:"",status:"z3-ran",hash:"d075b1b1d8fba87be0f64383ec310aacc1257623"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7688],{8486:(a,e,n)=>{n.r(e),n.d(e,{assets:()=>g,contentTitle:()=>l,default:()=>c,frontMatter:()=>p,metadata:()=>i,toc:()=>o});var s=n(8168),t=(n(6540),n(5680)),m=n(2317),r=n.n(m);const p={title:"Datatypes",sidebar_position:5},l=void 0,i={unversionedId:"theories/Datatypes",id:"theories/Datatypes",title:"Datatypes",description:"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures.",source:"@site/docs-smtlib/02 - theories/05 - Datatypes.md",sourceDirName:"02 - theories",slug:"/theories/Datatypes",permalink:"/z3guide/docs/theories/Datatypes",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/02 - theories/05 - Datatypes.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Datatypes",sidebar_position:5},sidebar:"smtlibSidebar",previous:{title:"Arrays",permalink:"/z3guide/docs/theories/Arrays"},next:{title:"Strings",permalink:"/z3guide/docs/theories/Strings"}},g={},o=[{value:"Records",id:"records",level:3},{value:"Record Updates",id:"record-updates",level:3},{value:"Scalars (enumeration types)",id:"scalars-enumeration-types",level:3},{value:"Recursive datatypes",id:"recursive-datatypes",level:3},{value:"Mutually recursive datatypes",id:"mutually-recursive-datatypes",level:3},{value:"Z3 will not prove inductive facts",id:"z3-will-not-prove-inductive-facts",level:3},{value:"Nested datatypes with Arrays and Sequences",id:"nested-datatypes-with-arrays-and-sequences",level:3},{value:"Using Datatypes for solving type constraints",id:"using-datatypes-for-solving-type-constraints",level:2},{value:"Checking if terms have principal types",id:"checking-if-terms-have-principal-types",level:4},{value:"Using UNSAT cores to identify mutually inconsistent type constraints",id:"using-unsat-cores-to-identify-mutually-inconsistent-type-constraints",level:3},{value:"Using optimization to localize type errors",id:"using-optimization-to-localize-type-errors",level:3}],y={toc:o},N="wrapper";function c(a){let{components:e,...n}=a;return(0,t.yg)(N,(0,s.A)({},y,n,{components:e,mdxType:"MDXLayout"}),(0,t.yg)("p",null,"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures."),(0,t.yg)("h3",{id:"records"},"Records"),(0,t.yg)("p",null,"A record is specified as a datatype with a single constructor and as many arguments as record elements. The number of arguments to a record are always the same. The type system does not allow to extend records and there is no record subtyping."),(0,t.yg)("p",null,"The following example illustrates that two records are equal only if all the arguments are equal. It introduces the parametric type Pair, with constructor mk-pair and two arguments that can be accessed using the selector functions first and second."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2)))))\n(declare-const p1 (Pair Int Int))\n(declare-const p2 (Pair Int Int))\n(assert (= p1 p2))\n(assert (< (second p1) 20))\n(check-sat)\n(get-model)\n(assert (not (= (first p1) (first p2))))\n(check-sat)",result:{output:"sat\n(\n (define-fun p2 () (Pair Int Int)\n (mk-pair 0 19))\n (define-fun p1 () (Pair Int Int)\n (mk-pair 0 19))\n)\nunsat\n",error:"",status:"z3-ran",hash:"1158221f1865c9d072fed54e5e5d2457e1a763a9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"record-updates"},"Record Updates"),(0,t.yg)("p",null,"You can create variants of records by updating selected fields."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2)))))\n(declare-const p1 (Pair Int Int))\n(declare-const p2 (Pair Int Int))\n(assert (not (= p1 p2)))\n(assert (= p1 ((_ update-field first) p2 1)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun p2 () (Pair Int Int)\n (mk-pair 2 3))\n (define-fun p1 () (Pair Int Int)\n (mk-pair 1 3))\n)\n",error:"",status:"z3-ran",hash:"e3c62e0af5a7999fe6ff653d3f947e983a1c213b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"scalars-enumeration-types"},"Scalars (enumeration types)"),(0,t.yg)("p",null,"A scalar sort is a finite domain sort. The elements of the finite domain are enumerated as distinct constants. For example, the sort S is a scalar type with three values A, B and C. It is possible for three constants of sort S to be distinct, but not for four constants."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes () ((S A B C)))\n(declare-const x S)\n(declare-const y S)\n(declare-const z S)\n(declare-const u S)\n(assert (distinct x y z))\n(check-sat)\n(assert (distinct x y z u))\n(check-sat)",result:{output:"sat\nunsat\n",error:"",status:"z3-ran",hash:"a788e2348e47f042d3bcc308a009902a4b45157d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"recursive-datatypes"},"Recursive datatypes"),(0,t.yg)("p",null,"A recursive datatype declaration includes itself directly (or indirectly) as a component. A standard example of a recursive data-type is the one of lists. A parametric list can be specified in Z3 as"),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-datatypes (T) ((Lst nil (cons (hd T) (tl Lst)))))\n(declare-const l1 (Lst Int))\n(declare-const l2 (Lst Bool))",result:{output:"",error:"",status:"z3-ran",hash:"867a153dea27c625c5b857d0e86a488e10653e66"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"The List recursive datatype is builtin in Z3. The empty list is nil, and the constructor insert is used to build new lists. The accessors head and tail are defined as usual."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const l1 (List Int))\n(declare-const l2 (List Int))\n(declare-const l3 (List Int))\n(declare-const x Int)\n(assert (not (= l1 nil)))\n(assert (not (= l2 nil)))\n(assert (= (head l1) (head l2)))\n(assert (not (= l1 l2)))\n(assert (= l3 (insert x l2)))\n(assert (< x 100))\n(check-sat)\n(get-model)\n(assert (= (tail l1) (tail l2)))\n(check-sat)",result:{output:"sat\n(\n (define-fun l1 () (List Int)\n (insert 2 nil))\n (define-fun x () Int\n 99)\n (define-fun l2 () (List Int)\n (insert 2 (insert 3 nil)))\n (define-fun l3 () (List Int)\n (insert 99 (insert 2 (insert 3 nil))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"75fd8affa26822db05bcb71b6c0d8439629312e4"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"In the example above, we also assert that l1 and l2 are not nil. This is because the interpretation of head and tail is under-specified on nil. So then head and tail would not be able to distinguish nil from (insert (head nil) (tail nil))."),(0,t.yg)("h3",{id:"mutually-recursive-datatypes"},"Mutually recursive datatypes"),(0,t.yg)("p",null,"You can also specify mutually recursive datatypes for Z3. We list one example below."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"; declare a mutually recursive parametric datatype\n(declare-datatypes (T) ((Tree leaf (node (value T) (children TreeList)))\n (TreeList nil (cons (car Tree) (cdr TreeList)))))\n(declare-const t1 (Tree Int))\n(declare-const t2 (Tree Bool))\n; we must use the 'as' construct to distinguish the leaf (Tree Int) from leaf (Tree Bool)\n(assert (not (= t1 (as leaf (Tree Int)))))\n(assert (< (value t1) 20))\n(assert (not (is-leaf t2)))\n(assert (not (value t2)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun t1 () (Tree Int)\n (node 0 (as nil (TreeList Int))))\n (define-fun t2 () (Tree Bool)\n (node false (as nil (TreeList Bool))))\n)\n",error:"",status:"z3-ran",hash:"1addb0a1a2076beac5633922a257a21f70806d8b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("p",null,"In the example above, we have a tree of Booleans and a tree of integers. The leaf constant must return a tree of a specific sort. To specify the result sort, we use the qualified identifier (as leaf (Tree Int)). Note that, we do not need to use a qualified identifier for value, since Z3 can infer the intended declaration using the sort of the argument."),(0,t.yg)("h3",{id:"z3-will-not-prove-inductive-facts"},"Z3 will not prove inductive facts"),(0,t.yg)("p",null,"The ground decision procedures for recursive datatypes don't lift to establishing inductive facts. Z3 does not contain methods for producing proofs by induction. This may change in the future. In particular, consider the following example where the function p is true on all natural numbers, which can be proved by induction over Nat. Z3 enters a matching loop as it attempts instantiating the universally quantified implication."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :timeout 2000)\n(declare-datatypes () ((Nat zero (succ (pred Nat)))))\n(declare-fun p (Nat) Bool)\n(assert (p zero))\n(assert (forall ((x Nat)) (implies (p (pred x)) (p x))))\n(assert (not (forall ((x Nat)) (p x))))\n(check-sat)\n(get-info :all-statistics)",result:{output:"unknown\n(:added-eqs 20252\n :binary-propagations 1\n :conflicts 2893\n :datatype-accessor-ax 2894\n :datatype-constructor-ax 5786\n :datatype-occurs-check 5788\n :datatype-splits 2894\n :decisions 2893\n :final-checks 2894\n :max-generation 1\n :max-memory 18.76\n :memory 12.11\n :mk-bool-var 8684\n :mk-clause-binary 1\n :num-allocs 115737\n :num-checks 1\n :propagations 1\n :quant-instantiations 2893\n :rlimit-count 205828\n :time 2.26)\n",error:"",status:"z3-ran",hash:"47bca1e57b474d4d59b96f32de90925485336b9e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"nested-datatypes-with-arrays-and-sequences"},"Nested datatypes with Arrays and Sequences"),(0,t.yg)("p",null,"In some applications it is convenient to have a sequence of types that are\nrecursively defined. For example an abstract syntax tree of a program is a sequence of\nbasic statements, and a basic statement can be an assignment or an if-then-else statement,\nwhere the then and else branches are statements. Similarly, it may be convenient to use\na nesting of algebraic data-types and arrays. Z3 supports nesting ADTs over sequences and over\nranges of arrays."),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Expr)\n(declare-sort Var)\n(declare-datatypes ((Stmt 0)) \n (((Assignment (lval Var) (rval Expr)) \n (If (cond Expr) (th Stmt) (el Stmt)) \n (Seq (stmts (Seq Stmt))))))\n\n(declare-const s Stmt)\n(declare-const t Stmt)\n\n(assert ((_ is Seq) t))\n(assert ((_ is Seq) s))\n(assert (= s (seq.nth (stmts t) 2)))\n(assert (>= (seq.len (stmts s)) 5))\n(check-sat)\n(get-model)\n(assert (= s (Seq (seq.unit s))))\n(check-sat)",result:{output:"sat\n(\n ;; universe for Expr:\n ;; Expr!val!7 Expr!val!3 Expr!val!1 Expr!val!4 Expr!val!0 Expr!val!6 Expr!val!5 Expr!val!2 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Expr!val!7 () Expr)\n (declare-fun Expr!val!3 () Expr)\n (declare-fun Expr!val!1 () Expr)\n (declare-fun Expr!val!4 () Expr)\n (declare-fun Expr!val!0 () Expr)\n (declare-fun Expr!val!6 () Expr)\n (declare-fun Expr!val!5 () Expr)\n (declare-fun Expr!val!2 () Expr)\n ;; cardinality constraint:\n (forall ((x Expr))\n (or (= x Expr!val!7)\n (= x Expr!val!3)\n (= x Expr!val!1)\n (= x Expr!val!4)\n (= x Expr!val!0)\n (= x Expr!val!6)\n (= x Expr!val!5)\n (= x Expr!val!2)))\n ;; -----------\n ;; universe for Var:\n ;; Var!val!2 Var!val!0 Var!val!3 Var!val!4 Var!val!5 Var!val!6 Var!val!7 Var!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Var!val!2 () Var)\n (declare-fun Var!val!0 () Var)\n (declare-fun Var!val!3 () Var)\n (declare-fun Var!val!4 () Var)\n (declare-fun Var!val!5 () Var)\n (declare-fun Var!val!6 () Var)\n (declare-fun Var!val!7 () Var)\n (declare-fun Var!val!1 () Var)\n ;; cardinality constraint:\n (forall ((x Var))\n (or (= x Var!val!2)\n (= x Var!val!0)\n (= x Var!val!3)\n (= x Var!val!4)\n (= x Var!val!5)\n (= x Var!val!6)\n (= x Var!val!7)\n (= x Var!val!1)))\n ;; -----------\n (define-fun t () Stmt\n (Seq (as seq.empty (Seq Stmt))))\n (define-fun s () Stmt\n (Seq (seq.++ (seq.unit (Assignment Var!val!7 Expr!val!7))\n (seq.unit (Assignment Var!val!6 Expr!val!6))\n (seq.unit (Assignment Var!val!1 Expr!val!1))\n (seq.unit (Assignment Var!val!0 Expr!val!0))\n (seq.unit (Assignment Var!val!5 Expr!val!5)))))\n (define-fun seq.nth_u ((x!0 (Seq Stmt)) (x!1 Int)) Stmt\n (Seq (seq.++ (seq.unit (Assignment Var!val!7 Expr!val!7))\n (seq.unit (Assignment Var!val!6 Expr!val!6))\n (seq.unit (Assignment Var!val!1 Expr!val!1))\n (seq.unit (Assignment Var!val!0 Expr!val!0))\n (seq.unit (Assignment Var!val!5 Expr!val!5)))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"4df670a452df5fad24a7b8bdcb06ab02e5a3c0fa"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h2",{id:"using-datatypes-for-solving-type-constraints"},"Using Datatypes for solving type constraints"),(0,t.yg)("p",null,"In the following we use algebraic datatypes to represent type constraints\nfor simply typed lambda calculus.\nTerms and types over simply typed lambda calculus are of the form"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M ::= x \\mid M M \\mid \\lambda x \\ . \\ M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"::="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"MM"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"s"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"r"),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"g"),(0,t.yg)("mo",{parentName:"mrow"},"\u2223"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\tau ::= int \\mid string \\mid \\tau \\rightarrow \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"::="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2223"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"))))))),(0,t.yg)("p",null,"where ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"x")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," is bound variable, ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M M'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032")))))))))))))," applies the function ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," to argument ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),", and ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mtext",{parentName:"mrow"},"\xa0"),(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\lambda x \\ . \\ M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mspace"},"\xa0"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," is a lambda abstraction.\nThe ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"t")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"int")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6595em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t")))))," and ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"s"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"r"),(0,t.yg)("mi",{parentName:"mrow"},"i"),(0,t.yg)("mi",{parentName:"mrow"},"n"),(0,t.yg)("mi",{parentName:"mrow"},"g")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"string")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.854em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"in"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g")))))," types are type constants."),(0,t.yg)("p",null,"A type judgemnt is"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"))))))),(0,t.yg)("p",null,"where ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393")))))," is a type environment that provides types to free variables in ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"))))),".\nAn expression ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"M")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"M")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M")))))," has a type ",(0,t.yg)("span",{parentName:"p",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4")))))," if there is a derivation using the rules:"),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma, x : \\tau \\vdash x : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4")))))),(0,t.yg)("li",{parentName:"ul"},"If ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M : \\tau \\rightarrow \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M' : \\tau")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4")))))," then ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash M M' : \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),"."),(0,t.yg)("li",{parentName:"ul"},"If ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma, x : \\tau \\vdash M : \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032")))))))))))))," then ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"\u0393"),(0,t.yg)("mo",{parentName:"mrow"},"\u22a2"),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow"},":"),(0,t.yg)("mi",{parentName:"mrow"},"\u03c4"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"\u03c4"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\Gamma \\vdash \\lambda x : M : \\tau \\rightarrow \\tau'")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},"\u0393"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u22a2"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},":"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.1132em"}},"\u03c4"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))))))),".")),(0,t.yg)("p",null,"We can use constraints over algebraic data-types to determine if expressions can be typed. "),(0,t.yg)("ul",null,(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M M') = Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"X"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M) = X \\rightarrow Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),", ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("msup",{parentName:"mrow"},(0,t.yg)("mi",{parentName:"msup"},"M"),(0,t.yg)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032")),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"X")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(M') = X")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord"},(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"msupsub"},(0,t.yg)("span",{parentName:"span",className:"vlist-t"},(0,t.yg)("span",{parentName:"span",className:"vlist-r"},(0,t.yg)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,t.yg)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,t.yg)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,t.yg)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},(0,t.yg)("span",{parentName:"span",className:"mord mtight"},"\u2032"))))))))),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"))))),", for fresh ",(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"X"),(0,t.yg)("mo",{parentName:"mrow",separator:"true"},","),(0,t.yg)("mi",{parentName:"mrow"},"Y")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"X, Y")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"X"),(0,t.yg)("span",{parentName:"span",className:"mpunct"},","),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"Y"))))),"."),(0,t.yg)("li",{parentName:"ul"},(0,t.yg)("span",{parentName:"li",className:"math math-inline"},(0,t.yg)("span",{parentName:"span",className:"katex"},(0,t.yg)("span",{parentName:"span",className:"katex-mathml"},(0,t.yg)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,t.yg)("semantics",{parentName:"math"},(0,t.yg)("mrow",{parentName:"semantics"},(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"\u03bb"),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"="),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"x"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,t.yg)("mo",{parentName:"mrow"},"\u2192"),(0,t.yg)("mi",{parentName:"mrow"},"t"),(0,t.yg)("mi",{parentName:"mrow"},"y"),(0,t.yg)("mi",{parentName:"mrow"},"p"),(0,t.yg)("mi",{parentName:"mrow"},"e"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,t.yg)("mi",{parentName:"mrow"},"M"),(0,t.yg)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,t.yg)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"type(\\lambda x . M) = type(x) \\rightarrow type(M)")))),(0,t.yg)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"\u03bb"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mord"},"."),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"="),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,t.yg)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,t.yg)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,t.yg)("span",{parentName:"span",className:"base"},(0,t.yg)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"t"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,t.yg)("span",{parentName:"span",className:"mopen"},"("),(0,t.yg)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"M"),(0,t.yg)("span",{parentName:"span",className:"mclose"},")"))))))),(0,t.yg)("h4",{id:"checking-if-terms-have-principal-types"},"Checking if terms have principal types"),(0,t.yg)("p",null,"We define types and expressions as algebraic data-types.\nThe types of applications produces three constraints for\napplications and the single constraint for lambda abstraction.\nThe encoding into SMTLIB uses several features. Besides algebraic\ndata-types it uses uninterpreted functions instead of introducing\nfresh variables. It defines a recursive function that extracts\ntype constraints from an expression. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(declare-const x Var)\n(declare-const y Var)\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1)))\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(define-fun-rec type-constraints ((M M)) Bool\n (match M\n (case (var x) true)\n (case (app M1 M2)\n (if (app-constraint M1 M2)\n (and (type-constraints M1) (type-constraints M2)) \n false))\n (case (lam x M1)\n (if (lam-constraint x M1)\n (type-constraints M1) \n false))\n )\n)\n\n; the identity function can be typed.\n(push)\n(assert (type-constraints (lam x (var x))))\n(check-sat)\n(pop)\n\n; there is no simple type for x such that (x x) is well typed.\n; the type constraints are unsat due to the semantics of algebraic\n; data-types: it is not possible to create an instance of an\n; algebraic data-type that is a sub-term of itself.\n(push)\n(assert (type-constraints (lam x (app (var x) (var x)))))\n(check-sat)\n(pop)\n\n; Applying a function that takes an integer to a string is not well-typed\n(push)\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(assert (= (type (ofint 3)) int))\n(declare-fun ofstring (String) M)\n(assert (= (type (ofstring "a")) string))\n(assert (type-constraints (app (lam x (app (app plus (var x)) (ofint 3))) (ofstring "a"))))\n(check-sat)\n(pop)',result:{output:"sat\nunsat\nunsat\n",error:"",status:"z3-ran",hash:"07e1880cf210cc66915eb18d65f82f0c21f14b26"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"using-unsat-cores-to-identify-mutually-inconsistent-type-constraints"},"Using UNSAT cores to identify mutually inconsistent type constraints"),(0,t.yg)("p",null,"We can track each sub-expression and use unsatisfiable cores to\nidentify a set of mutually inconsistent type constraints.\nWhen the core is minimial, it means that modifying any one of the\nsubterms from the corresponding violated constraints can fix the type error. This provides some indication of error location, but isn't\ngreat for diagnostics. In the next section we use MaxSAT for more\ntargeted diagnostics. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :produce-unsat-cores true)\n(set-option :smt.core.minimize true)\n(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(declare-const x Var)\n(declare-const y Var)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1))\n )\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(declare-fun ofstring (String) M)\n(define-const x_plus_3 M (app (app plus (var x)) (ofint 3)))\n\n(assert (= (type (ofint 3)) int))\n(assert (= (type (ofstring "a")) string))\n\n(assert (! (app-constraint (lam x x_plus_3) (ofstring "a")) :named t1))\n(assert (! (lam-constraint x x_plus_3) :named t2))\n(assert (! (app-constraint (app plus (var x)) (ofint 3)) :named t3))\n(assert (! (app-constraint plus (var x)) :named t4))\n(check-sat)\n(get-unsat-core)',result:{output:"unsat\n(t4 t2 t1)\n",error:"",status:"z3-ran",hash:"3f5e5890ebbcd300cff74fb18111491ede3f679b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,t.yg)("h3",{id:"using-optimization-to-localize-type-errors"},"Using optimization to localize type errors"),(0,t.yg)("p",null,"By asserting each type checking condition as a soft constraint and seeking an optimized solution to satisfy as many type constraints as possible, we obtain targeted information of what sub-terms could not\nbe type checked."),(0,t.yg)("p",null,"We can read off the type annotations for remaining sub-terms using\nthe current model. Albeit, it is not a user-friendly format. "),(0,t.yg)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-datatypes () ((Type \n int \n string \n (arrow (dom Type) (rng Type)))))\n(declare-sort Var)\n(declare-datatypes () ((M \n (lam (bound Var) (body M)) \n (var (v Var)) \n (app (fn M) (arg M)))))\n(declare-fun type (M) Type)\n(declare-const x Var)\n(declare-const y Var)\n(define-fun dom ((M M)) Type (dom (type M)))\n(define-fun rng ((M M)) Type (rng (type M)))\n(define-fun type ((x Var)) Type (type (var x)))\n(define-fun app-constraint ((M1 M) (M2 M)) Bool\n (and (= (dom M1) (type M2))\n (is-arrow (type M1))\n (= (type (app M1 M2)) (rng M1))\n )\n)\n(define-fun lam-constraint ((x Var) (M M)) Bool\n (= (type (lam x M)) (arrow (type x) (type M)))\n)\n\n(declare-const plus M)\n(assert (= (type plus) (arrow int (arrow int int))))\n(declare-fun ofint (Int) M)\n(assert (= (type (ofint 3)) int))\n(declare-fun ofstring (String) M)\n(declare-const t1 Bool)\n(declare-const t2 Bool)\n(declare-const t3 Bool)\n(declare-const t4 Bool)\n(assert (= (type (ofstring "a")) string))\n(define-const x_plus_3 M (app (app plus (var x)) (ofint 3)))\n(assert (= t1 (app-constraint (lam x x_plus_3) (ofstring "a"))))\n(assert (= t2 (lam-constraint x x_plus_3)))\n(assert (= t3 (app-constraint (app plus (var x)) (ofint 3))))\n(assert (= t4 (app-constraint plus (var x))))\n(assert-soft t1)\n(assert-soft t2)\n(assert-soft t3)\n(assert-soft t4)\n(check-sat)\n(get-objectives)\n(get-value (t1 t2 t3 t4))\n(get-model)',result:{output:"sat\n(objectives\n ( 1)\n)\n((t1 false)\n (t2 true)\n (t3 true)\n (t4 true))\n(\n ;; universe for Var:\n ;; Var!val!2 Var!val!0 Var!val!3 Var!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Var!val!2 () Var)\n (declare-fun Var!val!0 () Var)\n (declare-fun Var!val!3 () Var)\n (declare-fun Var!val!1 () Var)\n ;; cardinality constraint:\n (forall ((x Var))\n (or (= x Var!val!2) (= x Var!val!0) (= x Var!val!3) (= x Var!val!1)))\n ;; -----------\n (define-fun x_plus_3 () M\n (app (app plus (var x)) (ofint 3)))\n (define-fun plus () M\n (var Var!val!1))\n (define-fun x () Var\n Var!val!0)\n (define-fun t3 () Bool\n true)\n (define-fun t4 () Bool\n true)\n (define-fun t1 () Bool\n false)\n (define-fun t2 () Bool\n true)\n (define-fun y () Var\n Var!val!2)\n (define-fun ofstring ((x!0 String)) M\n (var Var!val!2))\n (define-fun type ((x!0 M)) Type\n (ite (= x!0 (var Var!val!1)) (arrow int (arrow int int))\n (ite (= x!0 (var Var!val!2)) string\n (ite (= x!0\n (lam Var!val!0\n (app (app (var Var!val!1) (var Var!val!0)) (var Var!val!3))))\n (arrow int int)\n (ite (= x!0\n (let ((a!1 (lam Var!val!0\n (app (app (var Var!val!1) (var Var!val!0))\n (var Var!val!3)))))\n (app a!1 (var Var!val!2))))\n (arrow (arrow int int) (arrow int int))\n (ite (= x!0 (app (var Var!val!1) (var Var!val!0))) (arrow int int)\n int))))))\n (define-fun ofint ((x!0 Int)) M\n (var Var!val!3))\n)\n",error:"",status:"z3-ran",hash:"d075b1b1d8fba87be0f64383ec310aacc1257623"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.c7a956ee.js b/assets/js/main.816cd80b.js similarity index 99% rename from assets/js/main.c7a956ee.js rename to assets/js/main.816cd80b.js index 34fb5a959..d136f37f1 100644 --- a/assets/js/main.c7a956ee.js +++ b/assets/js/main.816cd80b.js @@ -1,2 +1,2 @@ -/*! For license information please see main.c7a956ee.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8792],{9188:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(6540);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},463:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(8168),o=n(463),i=n.n(o),l=n(4054);const s={"06485bac":[()=>n.e(1276).then(n.t.bind(n,7757,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7757],"06c6b9ce":[()=>Promise.all([n.e(1869),n.e(2076),n.e(3533)]).then(n.bind(n,492)),"@site/docs-smtlib/03 - strategies/04 - probes.md",492],"073a52b7":[()=>Promise.all([n.e(1869),n.e(2076),n.e(888)]).then(n.bind(n,7603)),"@site/docs-smtlib/02 - theories/01 - Arithmetic.md",7603],"0a1ab64f":[()=>Promise.all([n.e(1869),n.e(2076),n.e(9530)]).then(n.bind(n,7600)),"@site/docs-smtlib/01 - logic/05 - Quantifiers.md",7600],"0a3279a5":[()=>n.e(4015).then(n.t.bind(n,1966,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],"0eeec111":[()=>Promise.all([n.e(1869),n.e(2076),n.e(1070)]).then(n.bind(n,6659)),"@site/docs-smtlib/02 - theories/08 - Regular Expressions.md",6659],"10abeab5":[()=>Promise.all([n.e(1869),n.e(2076),n.e(3776)]).then(n.bind(n,1286)),"@site/docs-smtlib/03 - strategies/01 - intro.md",1286],"1186e8df":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2606)]).then(n.bind(n,7726)),"@site/docs-programming/03 - Example Programs/04 - Formula Simplification.md",7726],17896441:[()=>Promise.all([n.e(1869),n.e(2076),n.e(5401),n.e(8401)]).then(n.bind(n,1878)),"@theme/DocItem",1878],"195441a5":[()=>Promise.all([n.e(1869),n.e(2076),n.e(7385)]).then(n.bind(n,915)),"@site/docs-smtlib/02 - theories/07 - Sequences.md",915],"1a4e3797":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2138)]).then(n.bind(n,4604)),"@theme/SearchPage",4604],"1be78505":[()=>Promise.all([n.e(1869),n.e(8714)]).then(n.bind(n,10)),"@theme/DocPage",10],"1df93b7f":[()=>Promise.all([n.e(1869),n.e(4583)]).then(n.t.bind(n,6872,23)),"@site/src/pages/index.tsx",6872],"1f391b9e":[()=>Promise.all([n.e(1869),n.e(2076),n.e(5401),n.e(6061)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],28050364:[()=>Promise.all([n.e(2076),n.e(3761)]).then(n.bind(n,6560)),"@site/src/pages/Acknowledgments.md",6560],"2e0965f8":[()=>Promise.all([n.e(1869),n.e(2076),n.e(7944)]).then(n.bind(n,219)),"@site/docs-smtlib/04 - optimization/01 - intro.md",219],"4429c81c":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2681)]).then(n.bind(n,3741)),"@site/docs-programming/05 - API Reference.md",3741],"443667e7":[()=>Promise.all([n.e(1869),n.e(2076),n.e(7797)]).then(n.bind(n,7223)),"@site/docs-smtlib/02 - theories/09 - Characters.md",7223],"45aa616d":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2521)]).then(n.bind(n,4386)),"@site/docs-programming/03 - Example Programs/03 - SPACER.md",4386],"48fb7ea4":[()=>Promise.all([n.e(1869),n.e(2076),n.e(3036)]).then(n.bind(n,9792)),"@site/docs-programming/02 - Z3 Python - Readonly/04 - Fixedpoints.md",9792],"4c5e69b3":[()=>Promise.all([n.e(1869),n.e(2076),n.e(7616)]).then(n.bind(n,3681)),"@site/docs-smtlib/05 - fixedpoints/02 - basicdatalog.md",3681],"54fd2156":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2536)]).then(n.bind(n,1759)),"@site/docs-smtlib/01 - logic/01 - intro.md",1759],"58c54c08":[()=>Promise.all([n.e(1869),n.e(2076),n.e(371)]).then(n.bind(n,9685)),"@site/docs-smtlib/03 - strategies/06 - summary.md",9685],"5b85c3b2":[()=>Promise.all([n.e(1869),n.e(2076),n.e(6577)]).then(n.bind(n,8274)),"@site/docs-smtlib/02 - theories/03 - IEEE Floats.md",8274],"5ddc85b0":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2040)]).then(n.bind(n,8783)),"@site/docs-programming/01 - Z3 JavaScript Examples.md",8783],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"6053633b":[()=>Promise.all([n.e(1869),n.e(2076),n.e(8359)]).then(n.bind(n,696)),"@site/docs-smtlib/02 - theories/04 - Arrays.md",696],"64721ce9":[()=>Promise.all([n.e(1869),n.e(2076),n.e(8492)]).then(n.bind(n,7213)),"@site/docs-programming/02 - Z3 Python - Readonly/02 - advanced.md",7213],"6e0e5780":[()=>n.e(7141).then(n.t.bind(n,2950,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/playground/plugin-route-context-module-100.json",2950],"700268b1":[()=>Promise.all([n.e(1869),n.e(2076),n.e(9993)]).then(n.bind(n,4887)),"@site/docs-smtlib/03 - strategies/03 - tactics.md",4887],"7389dc14":[()=>Promise.all([n.e(1869),n.e(2076),n.e(4252)]).then(n.bind(n,858)),"@site/docs-smtlib/05 - fixedpoints/01 - intro.md",858],"754b3097":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2760)]).then(n.bind(n,8649)),"@site/docs-smtlib/01 - logic/03 - propositional-logic.md",8649],"758a6945":[()=>Promise.all([n.e(1869),n.e(2076),n.e(7688)]).then(n.bind(n,8486)),"@site/docs-smtlib/02 - theories/05 - Datatypes.md",8486],"766c6c5d":[()=>Promise.all([n.e(1869),n.e(2076),n.e(3455)]).then(n.bind(n,699)),"@site/docs-smtlib/01 - logic/04 - Uninterpreted-functions-and-constants.md",699],76895455:[()=>Promise.all([n.e(1869),n.e(2076),n.e(656)]).then(n.bind(n,5835)),"@site/docs-playground/03 - test.md",5835],"7a606cbc":[()=>n.e(7601).then(n.t.bind(n,4061,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],"7b689f34":[()=>Promise.all([n.e(1869),n.e(2076),n.e(1350)]).then(n.bind(n,2305)),"@site/docs-programming/03 - Example Programs/05 - MBQI.md",2305],"825bcbd7":[()=>Promise.all([n.e(1869),n.e(2076),n.e(4260)]).then(n.bind(n,28)),"@site/docs-smtlib/02 - theories/06 - Strings.md",28],"87900bd0":[()=>Promise.all([n.e(1869),n.e(2076),n.e(5869)]).then(n.bind(n,6594)),"@site/docs-smtlib/03 - strategies/07 - simplifiers-summary.md",6594],"935f2afb":[()=>n.e(8581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"9dc876bf":[()=>Promise.all([n.e(1869),n.e(2076),n.e(2514)]).then(n.bind(n,7828)),"@site/docs-programming/02 - Z3 Python - Readonly/01 - Introduction.md",7828],a652379a:[()=>Promise.all([n.e(1869),n.e(2076),n.e(7999)]).then(n.bind(n,7041)),"@site/docs-playground/01 - Freeform Editing.md",7041],a9e3c423:[()=>n.e(9413).then(n.t.bind(n,5294,19)),"~docs/programming/version-current-metadata-prop-751.json",5294],adb42a35:[()=>Promise.all([n.e(1869),n.e(2076),n.e(5049)]).then(n.bind(n,6003)),"@site/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",6003],adb86f02:[()=>n.e(8888).then(n.t.bind(n,4058,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/programming/plugin-route-context-module-100.json",4058],b3502e91:[()=>Promise.all([n.e(1869),n.e(2076),n.e(7692)]).then(n.bind(n,599)),"@site/docs-programming/03 - Example Programs/01 - Cores and Satisfying Subsets.md",599],b38a955c:[()=>Promise.all([n.e(1869),n.e(2076),n.e(4705)]).then(n.bind(n,8442)),"@site/docs-smtlib/01 - logic/07 - Recursive Functions.md",8442],b4ec11a8:[()=>Promise.all([n.e(1869),n.e(2076),n.e(1796)]).then(n.bind(n,5467)),"@site/docs-programming/04 - Parameters.md",5467],b68ea0ea:[()=>Promise.all([n.e(1869),n.e(2076),n.e(3923)]).then(n.bind(n,1066)),"@site/docs-playground/02 - Guess the Secret Formula.md",1066],bf5686f6:[()=>Promise.all([n.e(1869),n.e(2076),n.e(8656)]).then(n.bind(n,1071)),"@site/docs-programming/03 - Example Programs/02 - User Propagator.md",1071],c3aeb5e2:[()=>Promise.all([n.e(1869),n.e(2076),n.e(7569)]).then(n.bind(n,6678)),"@site/docs-smtlib/04 - optimization/04 - softconstraints.md",6678],ca36d6a6:[()=>Promise.all([n.e(1869),n.e(2076),n.e(7035)]).then(n.bind(n,2657)),"@site/docs-smtlib/05 - fixedpoints/03 - engineforpdr.md",2657],cb919464:[()=>Promise.all([n.e(1869),n.e(2076),n.e(2563)]).then(n.bind(n,6569)),"@site/docs-smtlib/02 - theories/02 - Bitvectors.md",6569],d074f678:[()=>n.e(3427).then(n.t.bind(n,2770,19)),"~docs/playground/version-current-metadata-prop-751.json",2770],d0f3c7cb:[()=>Promise.all([n.e(1869),n.e(2076),n.e(1967)]).then(n.bind(n,2213)),"@site/docs-smtlib/04 - optimization/07 - advancedtopics.md",2213],d2940f3d:[()=>Promise.all([n.e(1869),n.e(2076),n.e(8105)]).then(n.bind(n,375)),"@site/docs-smtlib/04 - optimization/05 - combiningobjectives.md",375],d4e5791d:[()=>Promise.all([n.e(1869),n.e(2076),n.e(2722)]).then(n.bind(n,7488)),"@site/docs-programming/06 - Proof Logs.md",7488],d720861d:[()=>Promise.all([n.e(1869),n.e(2076),n.e(9416)]).then(n.bind(n,8387)),"@site/docs-smtlib/02 - theories/10 - Special Relations.md",8387],d7317efc:[()=>Promise.all([n.e(1869),n.e(2076),n.e(3229)]).then(n.bind(n,9732)),"@site/docs-smtlib/01 - logic/06 - Lambdas.md",9732],e33d6ff1:[()=>Promise.all([n.e(1869),n.e(2076),n.e(9613)]).then(n.bind(n,97)),"@site/docs-smtlib/03 - strategies/02 - goals.md",97],e643873c:[()=>Promise.all([n.e(1869),n.e(2076),n.e(9424)]).then(n.bind(n,6663)),"@site/docs-programming/02 - Z3 Python - Readonly/03 - Strategies.md",6663],e7125874:[()=>Promise.all([n.e(1869),n.e(2076),n.e(8124)]).then(n.bind(n,9487)),"@site/docs-smtlib/01 - logic/08 - Conclusion.md",9487],e867f36b:[()=>Promise.all([n.e(1869),n.e(2076),n.e(4800)]).then(n.bind(n,6711)),"@site/docs-smtlib/04 - optimization/06 - asmallcasestudy.md",6711],ebd79e67:[()=>Promise.all([n.e(1869),n.e(2076),n.e(3602)]).then(n.bind(n,4181)),"@site/docs-smtlib/04 - optimization/02 - apioptimization.md",4181],ee0ec331:[()=>Promise.all([n.e(1869),n.e(2076),n.e(2558)]).then(n.bind(n,473)),"@site/docs-smtlib/03 - strategies/05 - simplifiers.md",473],f3ee6518:[()=>Promise.all([n.e(1869),n.e(2076),n.e(6664)]).then(n.bind(n,1038)),"@site/docs-smtlib/05 - fixedpoints/05 - syntax.md",1038],f71821c5:[()=>Promise.all([n.e(1869),n.e(2076),n.e(7458)]).then(n.bind(n,6036)),"@site/docs-smtlib/01 - logic/02 - basiccommands.md",6036]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(6921),d=n(3102);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(1774).then(n.bind(n,1774)),modules:["@theme/NotFound"],webpack:()=>[1774],render(e,t){const n=e.default;return r.createElement(d.W,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.A)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.W,{value:s},r.createElement(l,(0,a.A)({},i,n)))}})}const p=[{path:"/z3guide/Acknowledgments",component:f("/z3guide/Acknowledgments","e10"),exact:!0},{path:"/z3guide/search",component:f("/z3guide/search","3ca"),exact:!0},{path:"/z3guide/docs",component:f("/z3guide/docs","faa"),routes:[{path:"/z3guide/docs/fixedpoints/basicdatalog",component:f("/z3guide/docs/fixedpoints/basicdatalog","53a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/engineforpdr",component:f("/z3guide/docs/fixedpoints/engineforpdr","112"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/intro",component:f("/z3guide/docs/fixedpoints/intro","673"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/syntax",component:f("/z3guide/docs/fixedpoints/syntax","dde"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/basiccommands",component:f("/z3guide/docs/logic/basiccommands","156"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Conclusion",component:f("/z3guide/docs/logic/Conclusion","1b6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/intro",component:f("/z3guide/docs/logic/intro","202"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Lambdas",component:f("/z3guide/docs/logic/Lambdas","c8d"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/propositional-logic",component:f("/z3guide/docs/logic/propositional-logic","9be"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Quantifiers",component:f("/z3guide/docs/logic/Quantifiers","240"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Recursive Functions",component:f("/z3guide/docs/logic/Recursive Functions","814"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Uninterpreted-functions-and-constants",component:f("/z3guide/docs/logic/Uninterpreted-functions-and-constants","81a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/advancedtopics",component:f("/z3guide/docs/optimization/advancedtopics","45a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/apioptimization",component:f("/z3guide/docs/optimization/apioptimization","6fc"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/arithmeticaloptimization",component:f("/z3guide/docs/optimization/arithmeticaloptimization","0a6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/asmallcasestudy",component:f("/z3guide/docs/optimization/asmallcasestudy","92d"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/combiningobjectives",component:f("/z3guide/docs/optimization/combiningobjectives","2fc"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/intro",component:f("/z3guide/docs/optimization/intro","8ed"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/softconstraints",component:f("/z3guide/docs/optimization/softconstraints","e75"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/goals",component:f("/z3guide/docs/strategies/goals","f29"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/intro",component:f("/z3guide/docs/strategies/intro","1ce"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/probes",component:f("/z3guide/docs/strategies/probes","701"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/simplifiers",component:f("/z3guide/docs/strategies/simplifiers","de6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/simplifiers-summary",component:f("/z3guide/docs/strategies/simplifiers-summary","7a5"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/summary",component:f("/z3guide/docs/strategies/summary","b37"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/tactics",component:f("/z3guide/docs/strategies/tactics","13e"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Arithmetic",component:f("/z3guide/docs/theories/Arithmetic","733"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Arrays",component:f("/z3guide/docs/theories/Arrays","ae4"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Bitvectors",component:f("/z3guide/docs/theories/Bitvectors","df6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Characters",component:f("/z3guide/docs/theories/Characters","637"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Datatypes",component:f("/z3guide/docs/theories/Datatypes","3a3"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/IEEE Floats",component:f("/z3guide/docs/theories/IEEE Floats","976"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Regular Expressions",component:f("/z3guide/docs/theories/Regular Expressions","130"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Sequences",component:f("/z3guide/docs/theories/Sequences","a3c"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Special Relations",component:f("/z3guide/docs/theories/Special Relations","d1a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Strings",component:f("/z3guide/docs/theories/Strings","446"),exact:!0,sidebar:"smtlibSidebar"}]},{path:"/z3guide/playground",component:f("/z3guide/playground","163"),routes:[{path:"/z3guide/playground/Freeform Editing",component:f("/z3guide/playground/Freeform Editing","cef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/playground/Guess the Secret Formula",component:f("/z3guide/playground/Guess the Secret Formula","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/playground/test",component:f("/z3guide/playground/test","54f"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/z3guide/programming",component:f("/z3guide/programming","17b"),routes:[{path:"/z3guide/programming/API Reference",component:f("/z3guide/programming/API Reference","85b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/Cores and Satisfying Subsets",component:f("/z3guide/programming/Example Programs/Cores and Satisfying Subsets","d24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/Formula Simplification",component:f("/z3guide/programming/Example Programs/Formula Simplification","40e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/MBQI",component:f("/z3guide/programming/Example Programs/MBQI","dd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/SPACER",component:f("/z3guide/programming/Example Programs/SPACER","0e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/User Propagator",component:f("/z3guide/programming/Example Programs/User Propagator","a24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Parameters",component:f("/z3guide/programming/Parameters","8b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Proof Logs",component:f("/z3guide/programming/Proof Logs","26a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 JavaScript Examples",component:f("/z3guide/programming/Z3 JavaScript Examples","f53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/advanced",component:f("/z3guide/programming/Z3 Python - Readonly/advanced","335"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Fixedpoints",component:f("/z3guide/programming/Z3 Python - Readonly/Fixedpoints","30c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Introduction",component:f("/z3guide/programming/Z3 Python - Readonly/Introduction","0ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Strategies",component:f("/z3guide/programming/Z3 Python - Readonly/Strategies","5f7"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/z3guide/",component:f("/z3guide/","5da"),exact:!0},{path:"*",component:f("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>o});var r=n(6540);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},5660:(e,t,n)=>{"use strict";var r=n(6540),a=n(961),o=n(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(8168),m=n(5260),g=n(4586),h=n(6025),b=n(6342),v=n(9024),y=n(2131),w=n(4090),E=n(2967),k=n(1463);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.default)(),n=(0,y.o)();return r.createElement(m.A,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.default)(),a=function(){const{siteConfig:{url:e}}=(0,g.default)(),{pathname:t}=(0,c.zy)();return e+(0,h.A)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.A,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.default)(),{metadata:t,image:n}=(0,b.p)();return r.createElement(r.Fragment,null,r.createElement(m.A,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.w})),n&&r.createElement(v.be,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.A,{tag:E.Cy,locale:e}),r.createElement(m.A,null,t.map(((e,t)=>r.createElement("meta",(0,p.A)({key:t},e))))))}const T=new Map;function C(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(6125),P=n(6988);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const L=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1)),n=document.getElementById(e);n?.scrollIntoView()}else window.scrollTo(0,0)}(n),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function z(e){const t=(0,d.u)(u.A,e);return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),z(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(L,{previousLocation:this.previousLocation,location:t},r.createElement(c.qh,{location:t,render:()=>e}))}}const N=O,I="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",D="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.A.canUseDOM&&r.createElement(m.A,null,r.createElement("script",null,B(e))),r.createElement("div",{id:I}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.default)(),{pathname:n}=(0,c.zy)();return t&&n===e?r.createElement(U,null):null}function j(){const{siteConfig:{favicon:e,title:t},i18n:{currentLocale:n,localeConfigs:a}}=(0,g.default)(),o=(0,h.A)(e),{htmlLang:i,direction:l}=a[n];return r.createElement(m.A,null,r.createElement("html",{lang:i,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),e&&r.createElement("link",{rel:"icon",href:o}))}var H=n(7489);function V(){const e=(0,d.v)(u.A),t=(0,c.zy)();return r.createElement(H.A,null,r.createElement(P.l,null,r.createElement(A.x,null,r.createElement(f,null,r.createElement(j,null),r.createElement(_,null),r.createElement($,null),r.createElement(N,{location:C(t)},e)))))}var G=n(4054);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var q=n(6921);const K=new Set,Y=new Set,Z=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Q={prefetch(e){if(!(e=>!Z()&&!Y.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,q.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Z()&&!Y.has(e))(e)&&(Y.add(e),z(e))},X=Object.freeze(Q);if(l.A.canUseDOM){window.docusaurus=X;const e=a.hydrate;z(window.location.pathname).then((()=>{e(r.createElement(i.vd,null,r.createElement(o.Kd,null,r.createElement(V,null))),document.getElementById("__docusaurus"))}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>c,l:()=>d});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/z3guide/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/docs","mainDocId":"logic/intro","docs":[{"id":"fixedpoints/basicdatalog","path":"/z3guide/docs/fixedpoints/basicdatalog","sidebar":"smtlibSidebar"},{"id":"fixedpoints/engineforpdr","path":"/z3guide/docs/fixedpoints/engineforpdr","sidebar":"smtlibSidebar"},{"id":"fixedpoints/intro","path":"/z3guide/docs/fixedpoints/intro","sidebar":"smtlibSidebar"},{"id":"fixedpoints/syntax","path":"/z3guide/docs/fixedpoints/syntax","sidebar":"smtlibSidebar"},{"id":"logic/basiccommands","path":"/z3guide/docs/logic/basiccommands","sidebar":"smtlibSidebar"},{"id":"logic/Conclusion","path":"/z3guide/docs/logic/Conclusion","sidebar":"smtlibSidebar"},{"id":"logic/intro","path":"/z3guide/docs/logic/intro","sidebar":"smtlibSidebar"},{"id":"logic/Lambdas","path":"/z3guide/docs/logic/Lambdas","sidebar":"smtlibSidebar"},{"id":"logic/propositional-logic","path":"/z3guide/docs/logic/propositional-logic","sidebar":"smtlibSidebar"},{"id":"logic/Quantifiers","path":"/z3guide/docs/logic/Quantifiers","sidebar":"smtlibSidebar"},{"id":"logic/Recursive Functions","path":"/z3guide/docs/logic/Recursive Functions","sidebar":"smtlibSidebar"},{"id":"logic/Uninterpreted-functions-and-constants","path":"/z3guide/docs/logic/Uninterpreted-functions-and-constants","sidebar":"smtlibSidebar"},{"id":"optimization/advancedtopics","path":"/z3guide/docs/optimization/advancedtopics","sidebar":"smtlibSidebar"},{"id":"optimization/apioptimization","path":"/z3guide/docs/optimization/apioptimization","sidebar":"smtlibSidebar"},{"id":"optimization/arithmeticaloptimization","path":"/z3guide/docs/optimization/arithmeticaloptimization","sidebar":"smtlibSidebar"},{"id":"optimization/asmallcasestudy","path":"/z3guide/docs/optimization/asmallcasestudy","sidebar":"smtlibSidebar"},{"id":"optimization/combiningobjectives","path":"/z3guide/docs/optimization/combiningobjectives","sidebar":"smtlibSidebar"},{"id":"optimization/intro","path":"/z3guide/docs/optimization/intro","sidebar":"smtlibSidebar"},{"id":"optimization/softconstraints","path":"/z3guide/docs/optimization/softconstraints","sidebar":"smtlibSidebar"},{"id":"strategies/goals","path":"/z3guide/docs/strategies/goals","sidebar":"smtlibSidebar"},{"id":"strategies/intro","path":"/z3guide/docs/strategies/intro","sidebar":"smtlibSidebar"},{"id":"strategies/probes","path":"/z3guide/docs/strategies/probes","sidebar":"smtlibSidebar"},{"id":"strategies/simplifiers","path":"/z3guide/docs/strategies/simplifiers","sidebar":"smtlibSidebar"},{"id":"strategies/simplifiers-summary","path":"/z3guide/docs/strategies/simplifiers-summary","sidebar":"smtlibSidebar"},{"id":"strategies/summary","path":"/z3guide/docs/strategies/summary","sidebar":"smtlibSidebar"},{"id":"strategies/tactics","path":"/z3guide/docs/strategies/tactics","sidebar":"smtlibSidebar"},{"id":"theories/Arithmetic","path":"/z3guide/docs/theories/Arithmetic","sidebar":"smtlibSidebar"},{"id":"theories/Arrays","path":"/z3guide/docs/theories/Arrays","sidebar":"smtlibSidebar"},{"id":"theories/Bitvectors","path":"/z3guide/docs/theories/Bitvectors","sidebar":"smtlibSidebar"},{"id":"theories/Characters","path":"/z3guide/docs/theories/Characters","sidebar":"smtlibSidebar"},{"id":"theories/Datatypes","path":"/z3guide/docs/theories/Datatypes","sidebar":"smtlibSidebar"},{"id":"theories/IEEE Floats","path":"/z3guide/docs/theories/IEEE Floats","sidebar":"smtlibSidebar"},{"id":"theories/Regular Expressions","path":"/z3guide/docs/theories/Regular Expressions","sidebar":"smtlibSidebar"},{"id":"theories/Sequences","path":"/z3guide/docs/theories/Sequences","sidebar":"smtlibSidebar"},{"id":"theories/Special Relations","path":"/z3guide/docs/theories/Special Relations","sidebar":"smtlibSidebar"},{"id":"theories/Strings","path":"/z3guide/docs/theories/Strings","sidebar":"smtlibSidebar"}],"draftIds":[],"sidebars":{"smtlibSidebar":{"link":{"path":"/z3guide/docs/logic/intro","label":"logic/intro"}}}}],"breadcrumbs":true},"playground":{"path":"/z3guide/playground","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/playground","mainDocId":"Freeform Editing","docs":[{"id":"Freeform Editing","path":"/z3guide/playground/Freeform Editing","sidebar":"tutorialSidebar"},{"id":"Guess the Secret Formula","path":"/z3guide/playground/Guess the Secret Formula","sidebar":"tutorialSidebar"},{"id":"test","path":"/z3guide/playground/test","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/z3guide/playground/Freeform Editing","label":"Freeform Editing"}}}}],"breadcrumbs":true},"programming":{"path":"/z3guide/programming","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/programming","mainDocId":"Z3 JavaScript Examples","docs":[{"id":"API Reference","path":"/z3guide/programming/API Reference","sidebar":"tutorialSidebar"},{"id":"Example Programs/Cores and Satisfying Subsets","path":"/z3guide/programming/Example Programs/Cores and Satisfying Subsets","sidebar":"tutorialSidebar"},{"id":"Example Programs/Formula Simplification","path":"/z3guide/programming/Example Programs/Formula Simplification","sidebar":"tutorialSidebar"},{"id":"Example Programs/MBQI","path":"/z3guide/programming/Example Programs/MBQI","sidebar":"tutorialSidebar"},{"id":"Example Programs/SPACER","path":"/z3guide/programming/Example Programs/SPACER","sidebar":"tutorialSidebar"},{"id":"Example Programs/User Propagator","path":"/z3guide/programming/Example Programs/User Propagator","sidebar":"tutorialSidebar"},{"id":"Parameters","path":"/z3guide/programming/Parameters","sidebar":"tutorialSidebar"},{"id":"Proof Logs","path":"/z3guide/programming/Proof Logs","sidebar":"tutorialSidebar"},{"id":"Z3 JavaScript Examples","path":"/z3guide/programming/Z3 JavaScript Examples","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/advanced","path":"/z3guide/programming/Z3 Python - Readonly/advanced","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Fixedpoints","path":"/z3guide/programming/Z3 Python - Readonly/Fixedpoints","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Introduction","path":"/z3guide/programming/Z3 Python - Readonly/Introduction","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Strategies","path":"/z3guide/programming/Z3 Python - Readonly/Strategies","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/z3guide/programming/Z3 JavaScript Examples","label":"Z3 JavaScript Examples"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"2.0.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.0.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.0.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.0.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.0.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.0.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.0.1"},"add-z3-files":{"type":"project"},"custom-webpack-config":{"type":"project"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(8193),o=n(5260),i=n(8824);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.A,null,r.createElement("title",null,"Page Error")),r.createElement(i.default,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(545);function o(e){return r.createElement(a.mg,e)}},5489:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(8168),a=n(6540),o=n(4625),i=n(440),l=n(4586),s=n(6654),u=n(8193);const c=a.createContext({collectLink:()=>{}});var d=n(6025);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.default)(),{withBaseUrl:E}=(0,d.h)(),k=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const _=(0,s.A)(x),T=x?.replace("pathname://","");let C=void 0!==T?(A=T,b&&(e=>e.startsWith("/"))(A)?E(A):A):void 0;var A;C&&_&&(C=(0,i.applyTrailingSlash)(C,{trailingSlash:y,baseUrl:w}));const P=(0,a.useRef)(!1),R=n?o.k2:o.N_,L=u.A.canUseIntersectionObserver,z=(0,a.useRef)();(0,a.useEffect)((()=>(!L&&_&&null!=C&&window.docusaurus.prefetch(C),()=>{L&&z.current&&z.current.disconnect()})),[z,C,L,_]);const O=C?.startsWith("#")??!1,N=!C||!_||O;return N||h||k.collectLink(C),N?a.createElement("a",(0,r.A)({ref:S,href:C},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(R,(0,r.A)({},v,{onMouseEnter:()=>{P.current||null==C||(window.docusaurus.preload(C),P.current=!0)},innerRef:e=>{S.current=e,L&&e&&_&&(z.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(z.current.unobserve(e),z.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),z.current.observe(e))},to:C},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,T:()=>l});var r=n(6540);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(2654);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>i,h:()=>o});var r=n(4586),a=n(6654);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.default)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},4586:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>o,o:()=>a});var r=n(6540);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>b,vT:()=>p,gk:()=>m,Gy:()=>d,HW:()=>v,ht:()=>f,r7:()=>h,jh:()=>g});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}function u(e,t){const n=s(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},d=()=>i("docusaurus-plugin-content-docs")??c,f=e=>function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.zy)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function g(e){return f(e).versions}function h(e){const t=f(e);return l(t)}function b(e){const t=f(e),{pathname:n}=(0,r.zy)();return u(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:u(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1258),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(9044)(`./prism-${e}`)})),delete globalThis.Prism}(r.default)},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},8824:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>wt});var r=n(6540),a=n(53),o=n(7489),i=n(9024),l=n(7559),s=n(4090),u=n(1312),c=n(6347),d=n(5062);function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}const p={skipToContent:"skipToContent_fXgn"};function m(){const{containerRef:e,handleSkip:t}=function(){const e=(0,r.useRef)(null),{action:t}=(0,c.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.querySelector(`.${l.G.wrapper.main}`);t&&f(t)}),[]);return(0,d.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,handleSkip:n}}();return r.createElement("div",{ref:e,role:"region"},r.createElement("a",{href:"#",className:p.skipToContent,onClick:t},r.createElement(u.A,{id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"},"Skip to main content")))}var g=n(6342),h=n(5041),b=n(8168);function v(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...l}=e;return r.createElement("svg",(0,b.A)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const y={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function w(){const{isActive:e,close:t}=(0,h.Mj)(),{announcementBar:n}=(0,g.p)();if(!e)return null;const{content:o,backgroundColor:i,textColor:l,isCloseable:s}=n;return r.createElement("div",{className:y.announcementBar,style:{backgroundColor:i,color:l},role:"banner"},s&&r.createElement("div",{className:y.announcementBarPlaceholder}),r.createElement("div",{className:y.announcementBarContent,dangerouslySetInnerHTML:{__html:o}}),s?r.createElement("button",{type:"button",className:(0,a.default)("clean-btn close",y.announcementBarClose),onClick:t,"aria-label":(0,u.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.createElement(v,{width:14,height:14,strokeWidth:3.1})):null)}var E=n(9876),k=n(3104);var S=n(9532),x=n(5600);const _=r.createContext(null);function T(e){let{children:t}=e;const n=function(){const e=(0,E.M)(),t=(0,x.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,S.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(_.Provider,{value:n},t)}function C(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function A(){const e=(0,r.useContext)(_);if(!e)throw new S.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,x.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:C(o)})),[a,o,t])}function P(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=A();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.default)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var R=n(5293),L=n(2303);function z(e){return r.createElement("svg",(0,b.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function O(e){return r.createElement("svg",(0,b.A)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const N={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function I(e){let{className:t,value:n,onChange:o}=e;const i=(0,L.default)(),l=(0,u.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.default)(N.toggle,t)},r.createElement("button",{className:(0,a.default)("clean-btn",N.toggleButton,!i&&N.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l},r.createElement(z,{className:(0,a.default)(N.toggleIcon,N.lightToggleIcon)}),r.createElement(O,{className:(0,a.default)(N.toggleIcon,N.darkToggleIcon)})))}const M=r.memo(I);function D(e){let{className:t}=e;const n=(0,g.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,R.G)();return n?null:r.createElement(M,{className:t,value:a,onChange:o})}var F=n(3465);function B(){return r.createElement(F.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function U(){const e=(0,E.M)();return r.createElement("button",{type:"button",className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(v,{color:"var(--ifm-color-emphasis-600)"}))}function $(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(B,null),r.createElement(D,{className:"margin-right--md"}),r.createElement(U,null))}var j=n(5489),H=n(6025),V=n(6654),G=n(1252),W=n(3186);function q(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:l,isDropdownLink:s,prependBaseUrlToHref:u,...c}=e;const d=(0,H.A)(a),f=(0,H.A)(t),p=(0,H.A)(o,{forcePrependBaseUrl:!0}),m=i&&o&&!(0,V.A)(o),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,m&&r.createElement(W.A,s&&{width:12,height:12}))};return o?r.createElement(j.default,(0,b.A)({href:u?p:o},c,g)):r.createElement(j.default,(0,b.A)({to:d,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,G.G)(n,t.pathname):t.pathname.startsWith(f)},c,g))}function K(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(q,(0,b.A)({className:(0,a.default)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function Y(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(q,(0,b.A)({className:(0,a.default)("menu__link",t)},o)))}function Z(e){let{mobile:t=!1,position:n,...a}=e;const o=t?Y:K;return r.createElement(o,(0,b.A)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var Q=n(1422),X=n(9169),J=n(4586);function ee(e,t){return e.some((e=>function(e,t){return!!(0,X.ys)(e.to,t)||!!(0,G.G)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function te(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,c]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[s]),r.createElement("div",{ref:s,className:(0,a.default)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(q,(0,b.A)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.default)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Ne,(0,b.A)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),c(!1);const t=s.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function ne(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const s=function(){const{siteConfig:{baseUrl:e}}=(0,J.default)(),{pathname:t}=(0,c.zy)();return t.replace(e,"/")}(),u=ee(t,s),{collapsed:d,toggleCollapsed:f,setCollapsed:p}=(0,Q.u)({initialState:()=>!u});return(0,r.useEffect)((()=>{u&&p(!u)}),[s,u,p]),r.createElement("li",{className:(0,a.default)("menu__list-item",{"menu__list-item--collapsed":d})},r.createElement(q,(0,b.A)({role:"button",className:(0,a.default)("menu__link menu__link--sublist menu__link--sublist-caret",n)},l,{onClick:e=>{e.preventDefault(),f()}}),l.children??l.label),r.createElement(Q.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:d},t.map(((e,t)=>r.createElement(Ne,(0,b.A)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function re(e){let{mobile:t=!1,...n}=e;const a=t?ne:te;return r.createElement(a,n)}var ae=n(2131);function oe(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,b.A)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ie="iconLanguage_nlXk";var le=n(961),se=n(5260),ue=n(4255);function ce(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var de=n(9188),fe=["translations"];function pe(){return pe=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var be="Ctrl";var ve=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=he(e,fe),i=a.buttonText,l=void 0===i?"Search":i,s=a.buttonAriaLabel,u=void 0===s?"Search":s,c=me((0,r.useState)(null),2),d=c[0],f=c[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(be))}),[]),r.createElement("button",pe({type:"button",className:"DocSearch DocSearch-Button","aria-label":u},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(de.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement(ye,{reactsToKey:d===be?be:"Meta"},d===be?r.createElement(ce,null):d),r.createElement(ye,{reactsToKey:"k"},"K"))))}));function ye(e){var t=e.reactsToKey,n=e.children,a=me((0,r.useState)(!1),2),o=a[0],i=a[1];return(0,r.useEffect)((function(){if(t)return window.addEventListener("keydown",e),window.addEventListener("keyup",n),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",n)};function e(e){e.key===t&&i(!0)}function n(e){e.key!==t&&"Meta"!==e.key||i(!1)}}),[t]),r.createElement("kbd",{className:o?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},n)}var we=n(2967);const Ee={button:{buttonText:(0,u.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,u.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,u.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,u.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,u.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,u.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,u.T)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,u.T)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,u.T)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,u.T)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,u.T)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,u.T)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,u.T)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,u.T)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,u.T)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,u.T)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,u.T)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,u.T)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,u.T)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,u.T)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,u.T)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,u.T)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,u.T)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,u.T)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,u.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,u.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,u.T)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let ke=null;function Se(e){let{hit:t,children:n}=e;return r.createElement(j.default,{to:t.url},n)}function xe(e){let{state:t,onClose:n}=e;const{generateSearchPageLink:a}=(0,ue.n)();return r.createElement(j.default,{to:a(t.query),onClick:n},r.createElement(u.A,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function _e(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,J.default)(),l=function(){const{locale:e,tags:t}=(0,we.af)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),s=o.searchParameters?.facetFilters??[],u=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(l,s):s,d={...o.searchParameters,facetFilters:u},{withBaseUrl:f}=(0,H.h)(),p=(0,c.W6)(),m=(0,r.useRef)(null),g=(0,r.useRef)(null),[h,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(void 0),E=(0,r.useCallback)((()=>ke?Promise.resolve():Promise.all([n.e(9462).then(n.bind(n,9462)),Promise.all([n.e(1869),n.e(8913)]).then(n.bind(n,8913)),Promise.all([n.e(1869),n.e(416)]).then(n.bind(n,416))]).then((e=>{let[{DocSearchModal:t}]=e;ke=t}))),[]),k=(0,r.useCallback)((()=>{E().then((()=>{m.current=document.createElement("div"),document.body.insertBefore(m.current,document.body.firstChild),v(!0)}))}),[E,v]),S=(0,r.useCallback)((()=>{v(!1),m.current?.remove()}),[v]),x=(0,r.useCallback)((e=>{E().then((()=>{v(!0),w(e.key)}))}),[E,v,w]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,G.G)(a,t)?window.location.href=t:p.push(t)}}).current,T=(0,r.useRef)((e=>e.map((e=>{if((0,G.G)(a,e.url))return e;const t=new URL(e.url);return{...e,url:f(`${t.pathname}${t.hash}`)}})))).current,C=(0,r.useMemo)((()=>e=>r.createElement(xe,(0,b.A)({},e,{onClose:S}))),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:h,onOpen:k,onClose:S,onInput:x,searchButtonRef:g}),r.createElement(r.Fragment,null,r.createElement(se.A,null,r.createElement("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),r.createElement(ve,{onTouchStart:E,onFocus:E,onMouseOver:E,onClick:k,ref:g,translations:Ee.button}),h&&ke&&m.current&&(0,le.createPortal)(r.createElement(ke,(0,b.A)({onClose:S,initialScrollY:window.scrollY,initialQuery:y,navigator:_,transformItems:T,hitComponent:Se,transformSearchClient:A},o.searchPagePath&&{resultsFooterComponent:C},o,{searchParameters:d,placeholder:Ee.placeholder,translations:Ee.modal})),m.current))}function Te(){const{siteConfig:e}=(0,J.default)();return r.createElement(_e,e.themeConfig.algolia)}const Ce={searchBox:"searchBox_ZlJk"};function Ae(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.default)(n,Ce.searchBox)},t)}var Pe=n(4070),Re=n(4142);var Le=n(5597);const ze=e=>e.docs.find((t=>t.id===e.mainDocId));const Oe={default:Z,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:l,localeConfigs:s}}=(0,J.default)(),c=(0,ae.o)(),d=[...n,...l.map((e=>{const n=`pathname://${c.createUrl({locale:e,fullyQualified:!1})}`;return{label:s[e].label,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],f=t?(0,u.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):s[i].label;return r.createElement(re,(0,b.A)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(oe,{className:ie}),f),items:d}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Ae,{className:n},r.createElement(Te,null))},dropdown:re,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.default)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Pe.zK)(a),l=(0,Re.QB)(t,a);return null===l?null:r.createElement(Z,(0,b.A)({exact:!0},o,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Pe.zK)(a),l=(0,Re.fW)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(Z,(0,b.A)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,Re.Vd)(a)[0],l=t??i.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(Z,(0,b.A)({},o,{label:l,to:s}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...l}=e;const s=(0,Pe.zK)(n),c=(0,Pe.jh)(n),{savePreferredVersionName:d}=(0,Le.g1)(n),f=[...o,...c.map((e=>{const t=s.alternateDocVersions[e.name]??ze(e);return{label:e.label,to:t.path,isActive:()=>e===s.activeVersion,onClick:()=>d(e.name)}})),...i],p=(0,Re.Vd)(n)[0],m=t&&f.length>1?(0,u.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):p.label,g=t&&f.length>1?void 0:ze(p).path;return f.length<=1?r.createElement(Z,(0,b.A)({},l,{mobile:t,label:m,to:g,isActive:a?()=>!1:void 0})):r.createElement(re,(0,b.A)({},l,{mobile:t,label:m,to:g,items:f,isActive:a?()=>!1:void 0}))}};function Ne(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Oe[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Ie(){const e=(0,E.M)(),t=(0,g.p)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ne,(0,b.A)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Me(e){return r.createElement("button",(0,b.A)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function De(){const e=0===(0,g.p)().navbar.items.length,t=A();return r.createElement(r.Fragment,null,!e&&r.createElement(Me,{onClick:()=>t.hide()}),t.content)}function Fe(){const e=(0,E.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(P,{header:r.createElement($,null),primaryMenu:r.createElement(Ie,null),secondaryMenu:r.createElement(De,null)}):null}const Be={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ue(e){return r.createElement("div",(0,b.A)({role:"presentation"},e,{className:(0,a.default)("navbar-sidebar__backdrop",e.className)}))}function $e(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,g.p)(),i=(0,E.M)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,k.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(e)return t.location.hash?(a.current=!0,void n(!1)):void n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.default)("navbar","navbar--fixed-top",n&&[Be.navbarHideable,!s&&Be.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ue,{onClick:i.toggle}),r.createElement(Fe,null))}const je="right";function He(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,b.A)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ve(){const e=(0,E.M)();return r.createElement("button",{onClick:e.toggle,onKeyDown:e.toggle,"aria-label":"Navigation bar toggle",className:"navbar__toggle clean-btn",type:"button",tabIndex:0},r.createElement(He,null))}const Ge={colorModeToggle:"colorModeToggle_DEke"};function We(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ne,(0,b.A)({},e,{key:t})))))}function qe(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ke(){const e=(0,E.M)(),t=(0,g.p)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(qe,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Ve,null),r.createElement(B,null),r.createElement(We,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(We,{items:a}),r.createElement(D,{className:Ge.colorModeToggle}),!o&&r.createElement(Ae,null,r.createElement(Te,null)))})}function Ye(){return r.createElement($e,null,r.createElement(Ke,null))}var Ze=n(3106);function Qe(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...l}=t,s=(0,H.A)(n),u=(0,H.A)(a,{forcePrependBaseUrl:!0});return r.createElement(j.default,(0,b.A)({className:"footer__link-item"},a?{href:i?u:a}:{to:s},l),o,a&&!(0,V.A)(a)&&r.createElement(W.A,null))}function Xe(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Qe,{item:t}))}function Je(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Xe,{key:t,item:e})))))}function et(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Je,{key:t,column:e}))))}function tt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function nt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Qe,{item:t})}function rt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(nt,{item:e}),t.length!==n+1&&r.createElement(tt,null))))))}function at(e){let{links:t}=e;return(0,Ze.C)(t)?r.createElement(et,{columns:t}):r.createElement(rt,{links:t})}var ot=n(1653);const it={footerLogoLink:"footerLogoLink_BH7S"};function lt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,H.h)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(ot.A,{className:(0,a.default)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function st(e){let{logo:t}=e;return t.href?r.createElement(j.default,{href:t.href,className:it.footerLogoLink,target:t.target},r.createElement(lt,{logo:t})):r.createElement(lt,{logo:t})}function ut(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ct(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.default)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function dt(){const{footer:e}=(0,g.p)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(ct,{style:o,links:n&&n.length>0&&r.createElement(at,{links:n}),logo:a&&r.createElement(st,{logo:a}),copyright:t&&r.createElement(ut,{copyright:t})})}const ft=r.memo(dt);var pt=n(9466);const mt="docusaurus.tab.",gt=r.createContext(void 0);const ht=(0,S.fM)([R.a,h.oq,function(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,pt.W)(`${mt}${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,pt.E)().forEach((t=>{if(t.startsWith(mt)){const n=t.substring(mt.length);e[n]=(0,pt.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const a=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:a})),[e,a])}();return r.createElement(gt.Provider,{value:n},t)},k.Tv,Le.VQ,i.Jx,function(e){let{children:t}=e;return r.createElement(x.y_,null,r.createElement(E.e,null,r.createElement(T,null,t)))}]);function bt(e){let{children:t}=e;return r.createElement(ht,null,t)}function vt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const yt={mainWrapper:"mainWrapper_z2l0"};function wt(e){const{children:t,noFooter:n,wrapperClassName:u,title:c,description:d}=e;return(0,s.J)(),r.createElement(bt,null,r.createElement(i.be,{title:c,description:d}),r.createElement(m,null),r.createElement(w,null),r.createElement(Ye,null),r.createElement("div",{className:(0,a.default)(l.G.wrapper.main,yt.mainWrapper,u)},r.createElement(o.A,{fallback:e=>r.createElement(vt,e)},t)),!n&&r.createElement(ft,null))}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var r=n(8168),a=n(6540),o=n(5489),i=n(6025),l=n(4586),s=n(6342),u=n(1653);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.A)(t.src),dark:(0,i.A)(t.srcDark||t.src)},l=a.createElement(u.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.default)(),{navbar:{title:n,logo:u}}=(0,s.p)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.A)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.default,(0,r.A)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(5260);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.A,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},1653:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(8168),a=n(6540),o=n(53),i=n(2303),l=n(5293);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.default)(),{colorMode:n}=(0,l.G)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.A)({key:e,src:u[e],alt:d,className:(0,o.default)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>l});var r=n(8168),a=n(6540),o=n(8193);const i="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??i}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.A.canUseDOM)return e?s:u}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return d({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(u.current,n),i?.(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.A)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?m:p;return a.createElement(r,n)}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>m,oq:()=>p});var r=n(6540),a=n(2303),o=n(9466),i=n(9532),l=n(6342);const s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.default)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>h,a:()=>g});var r=n(6540),a=n(8193),o=n(9532),i=n(9466),l=n(6342);const s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>h,XK:()=>y,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),l=n(4142),s=n(9532),u=n(9466);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.W)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.W)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.W)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.C5?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,a.Gy)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>s});var r=n(6540),a=n(9532);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.dV("DocsSidebarProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>p});var r=n(6540),a=n(5600),o=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>s,YL:()=>l,y_:()=>i});var r=n(6540),a=n(9532);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4255:(e,t,n)=>{"use strict";n.d(t,{n:()=>l});var r=n(6540),a=n(6347),o=n(4586);const i="q";function l(){const e=(0,a.W6)(),{siteConfig:{baseUrl:t}}=(0,o.default)(),[n,l]=(0,r.useState)("");(0,r.useEffect)((()=>{const e=new URLSearchParams(window.location.search).get(i)??"";l(e)}),[]);return{searchQuery:n,setSearchQuery:(0,r.useCallback)((t=>{const n=new URLSearchParams(window.location.search);t?n.set(i,t):n.delete(i),e.replace({search:n.toString()}),l(t)}),[e]),generateSearchPageLink:(0,r.useCallback)((e=>`${t}search?${i}=${encodeURIComponent(e)}`),[t])}}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>u});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.A.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},4142:(e,t,n)=>{"use strict";n.d(t,{$S:()=>m,C5:()=>d,OF:()=>v,QB:()=>E,Vd:()=>y,_o:()=>p,fW:()=>w,mz:()=>k,w8:()=>b});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),l=n(5597),s=n(6588),u=n(1682),c=n(9169);const d=!!i.Gy;function f(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=f(n.items,t);if(e)return e}}function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}function m(){const{pathname:e}=(0,a.zy)(),t=(0,s.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=f(t.items,(t=>(0,c.ys)(t.href,e)));if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,c.ys)(e,t),h=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||h(e.items,t))}function v(){const e=(0,s.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;if(!1===n||!e)return null;const r=[];return function e(n){for(const a of n)if("category"===a.type&&((0,c.ys)(a.href,t)||e(a.items))||"link"===a.type&&(0,c.ys)(a.href,t))return r.push(a),!0;return!1}(e.items),r.reverse()}function y(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,u.s)([t,n,a].filter(Boolean))),[t,n,a])}function w(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=y(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.s)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,a.zy)(),i=t.routes,l=i.find((e=>(0,a.B6)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.v)(i),sidebarName:s,sidebarItems:u}}},3106:(e,t,n)=>{"use strict";function r(e){return"title"in e[0]}n.d(t,{C:()=>r})},481:(e,t,n)=>{"use strict";n.d(t,{s:()=>a});var r=n(4586);function a(e){const{siteConfig:t}=(0,r.default)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},1682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{X:()=>r,s:()=>a})},9024:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>c,Jx:()=>p});var r=n(6540),a=n(53),o=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(481);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=(0,u.s)(t),{withBaseUrl:d}=(0,s.h)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.A,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.default)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.A,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.default)(o,i)},t)}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>s,Es:()=>a,ZC:()=>i,_q:()=>o,dV:()=>l,fM:()=>u});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},1252:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{G:()=>r})},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.default)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>d,Tv:()=>s,gk:()=>f});var r=n(6540),a=n(8193),o=n(2303),i=n(9532);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const c=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.default)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>i,af:()=>s,tU:()=>l});var r=n(4070),a=n(4586),o=n(5597);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,a.default)(),t=(0,r.Gy)(),n=(0,r.gk)(),s=(0,o.XK)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=s[e],o=t[e].versions.find((e=>e.isLast));return l(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:u}}},9466:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,W:()=>l});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r{"use strict";n.d(t,{o:()=>o});var r=n(4586),a=n(6347);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.default)(),{pathname:i}=(0,a.zy)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.default)().siteConfig.themeConfig}},2983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},53:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta,default:()=>o});const o=a},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>T,yJ:()=>p,sC:()=>A,AO:()=>f});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5228:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.r(t),n.d(t,{default:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,T=1;if(v){if(!(_=o(E,S,e,b))||_.index>=e.length)break;var C=_.index,A=_.index+_[0].length,P=S;for(P+=k.value.length;C>=P;)P+=(k=k.next).value.length;if(S=P-=k.value.length,k.value instanceof a)continue;for(var R=k;R!==t.tail&&(Pd.reach&&(d.reach=N);var I=k.prev;if(z&&(I=s(t,I,z),S+=z.length),u(t,I,T),k=s(t,I,new a(f,h?r.tokenize(L,h):L,y,L)),O&&s(t,k,O),T>1){var M={cause:f+","+m,reach:N};i(e,t,n,k.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},116:()=>{!function(e){function t(e){return RegExp(/(\()/.source+"(?:"+e+")"+/(?=[\s\)])/.source)}function n(e){return RegExp(/([\s([])/.source+"(?:"+e+")"+/(?=[\s)])/.source)}var r=/(?!\d)[-+*/~!@$%^=<>{}\w]+/.source,a="&"+r,o="(\\()",i="(?=\\s)",l=/(?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\))*\))*\))*/.source,s={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+r+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+r),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+r),alias:"property"},splice:{pattern:RegExp(",@?"+r),alias:["symbol","variable"]},keyword:[{pattern:RegExp(o+"(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)"+i),lookbehind:!0},{pattern:RegExp(o+"(?:append|by|collect|concat|do|finally|for|in|return)"+i),lookbehind:!0}],declare:{pattern:t(/declare/.source),lookbehind:!0,alias:"keyword"},interactive:{pattern:t(/interactive/.source),lookbehind:!0,alias:"keyword"},boolean:{pattern:n(/nil|t/.source),lookbehind:!0},number:{pattern:n(/[-+]?\d+(?:\.\d*)?/.source),lookbehind:!0},defvar:{pattern:RegExp(o+"def(?:const|custom|group|var)\\s+"+r),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(r)}},defun:{pattern:RegExp(o+/(?:cl-)?(?:defmacro|defun\*?)\s+/.source+r+/\s+\(/.source+l+/\)/.source),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+r),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(o+"lambda\\s+\\(\\s*(?:&?"+r+"(?:\\s+&?"+r+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(o+r),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},u={"lisp-marker":RegExp(a),varform:{pattern:RegExp(/\(/.source+r+/\s+(?=\S)/.source+l+/\)/.source),inside:s},argument:{pattern:RegExp(/(^|[\s(])/.source+r),lookbehind:!0,alias:"variable"},rest:s},c="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(o+l+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+c),inside:u},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+c),inside:u},keys:{pattern:RegExp("&key\\s+"+c+"(?:\\s+&allow-other-keys)?"),inside:u},argument:{pattern:RegExp(r),alias:"variable"},punctuation:/[()]/}};s.lambda.inside.arguments=d,s.defun.inside.arguments=e.util.clone(d),s.defun.inside.arguments.inside.sublist=d,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages["emacs-lisp"]=s}(Prism)},9044:(e,t,n)=>{var r={"./prism-lisp":116};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=9044},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(5228),o=n(9982);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n