Lean Inductive types having an Smt counterpart #
Create a reserve smt symbol for s
Instances For
Create a normal smt symbol for s
Instances For
Builtin Smt sort names. #
Smt Int symbol.
Equations
Instances For
Smt Bool symbol.
Equations
Instances For
Smt Prop symbol.
Equations
Instances For
Smt String symbol.
Equations
Instances For
Smt Nat symbol.
Equations
Instances For
Smt Empty symbol.
Equations
Instances For
Smt PEmpty symbol.
Equations
Instances For
Smt universal type symbol.
Equations
Instances For
Builtin Smt sorts. #
Smt Int Sort.
Instances For
Smt Bool Sort.
Instances For
Smt Prop Sort.
NOTE: This sort is defined during translation whenever required.
(see function definePropSort)
Instances For
Smt String Sort.
Instances For
Smt Param Sort instance.
Equations
- Blaster.Smt.paramSort s args = Blaster.Smt.SortExpr.ParamSort s args
Instances For
Smt Array Sort
Equations
- Blaster.Smt.arraySort args = Blaster.Smt.paramSort (Blaster.Smt.mkReservedSymbol "Array") args
Instances For
Smt Nat Sort.
NOTE: This sort is defined during translation whenever required.
(see function defineNatSort)
Instances For
Smt Empty Sort.
NOTE: This sort is declared during translation whenever required.
(see function defineEmptySort)
Instances For
Smt PEmpty Sort.
NOTE: This sort is declared during translation whenever required.
(see function definePEmptySort)
Instances For
Smt @@Type Sort used to denote universal sort
NOTE: This sort is declared during translation whenever required.
(see function defineTypeSort).
Instances For
Builtin Smt symbols. #
equality Smt symbol.
Equations
Instances For
Boolean not Smt symbol
Equations
Instances For
Boolean and Smt symbol.
Equations
Instances For
Boolean or Smt symbol.
Equations
Instances For
Implies Smt symbol.
Equations
Instances For
Integer addition Smt symbol.
Equations
Instances For
Integer subtraction Smt symbol.
Equations
Instances For
Integer multiplication Smt symbol.
Equations
Instances For
Integer native Smt division symbol.
Equations
Instances For
Integer native Smt modulo symbol.
Equations
Instances For
Integer Euclidean division Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.edivSymbol = Blaster.Smt.mkReservedSymbol "@Int.ediv"
Instances For
Integer Euclidean modulo Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.emodSymbol = Blaster.Smt.mkReservedSymbol "@Int.emod"
Instances For
Integer truncate division Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.tdivSymbol = Blaster.Smt.mkReservedSymbol "@Int.tdiv"
Instances For
Integer truncate modulo Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.tmodSymbol = Blaster.Smt.mkReservedSymbol "@Int.tmod"
Instances For
Integer floor division Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.fdivSymbol = Blaster.Smt.mkReservedSymbol "@Int.fdiv"
Instances For
Integer floor modulo Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.fmodSymbol = Blaster.Smt.mkReservedSymbol "@Int.fmod"
Instances For
Integer to Nat Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
- Blaster.Smt.toNatSymbol = Blaster.Smt.mkReservedSymbol "@Int.toNat"
Instances For
Integer cast Smt symbol. NOTE: Only available in z3. This cast function is mainly used as a wrapper around power to to only handle positive exponentiation. Indeed, negative exponentiation can lead to a Real representation, which cannot be the case for Lean4 pow for both Int and Nat.
Equations
Instances For
Native integer power Smt symbol.
Equations
Instances For
Integer power Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
Instances For
Nat power Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
Instances For
Nat subtraction Smt symbol. NOTE: This function is defined during translation whenever required.
Equations
Instances For
Integer absolute Smt symbol.
Equations
Instances For
less than Smt symbol.
Equations
Instances For
less than or equal to Smt symbol.
Equations
Instances For
if-then-else Smt symbol.
Equations
Instances For
underscore Smt symbol.
Equations
Instances For
select Smt symbol.
Equations
Instances For
as-array Smt symbol.
Equations
Instances For
less than Smt symbol for String.
Equations
Instances For
less than or equal to Smt symbol for String.
Equations
Instances For
append Smt symbol for String.
Equations
Instances For
replace Smt symbol for String.
NOTE: Unlike the replace Lean4 function, this function only
replaces the first occurrence of src by dst in s.
The equivalent function for Lean4 is str.replace_all
Equations
- Blaster.Smt.strReplaceSymbol = Blaster.Smt.mkReservedSymbol "str.replace"
Instances For
replace all Smt symbol for String.
Equations
- Blaster.Smt.strReplaceAllSymbol = Blaster.Smt.mkReservedSymbol "str.replace_all"
Instances For
length Smt symbol for String.
Equations
Instances For
Builtin Smt functions. #
Create an Smt application term with function name nm and parameters args.
Equations
- Blaster.Smt.mkSmtAppN nm args = Blaster.Smt.SmtTerm.AppTerm nm args
Instances For
Same as mkSmtAppN but accepts an Smt symbol as function name.
Equations
Instances For
Create an Equality Smt application
Equations
- Blaster.Smt.eqSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.eqSymbol #[op1, op2]
Instances For
Create an Boolean not Smt application
Equations
Instances For
Create an Boolean and Smt application
Equations
- Blaster.Smt.andSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.andSymbol #[op1, op2]
Instances For
Create an Boolean or Smt application
Equations
- Blaster.Smt.orSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.orSymbol #[op1, op2]
Instances For
Create an Implies Smt application
Equations
- Blaster.Smt.impliesSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.impSymbol #[op1, op2]
Instances For
Create an Integer addtion Smt application
Equations
- Blaster.Smt.addSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.addSymbol #[op1, op2]
Instances For
Create an Integer subtraction Smt application
Equations
- Blaster.Smt.subSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.subSymbol #[op1, op2]
Instances For
Create an Integer multiplication Smt application
Equations
- Blaster.Smt.mulSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.mulSymbol #[op1, op2]
Instances For
Create an Integer native division Smt application
Equations
- Blaster.Smt.divSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.divSymbol #[op1, op2]
Instances For
Create an Integer native modulo Smt application
Equations
- Blaster.Smt.modSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.modSymbol #[op1, op2]
Instances For
Create an Integer negation Smt application
Equations
Instances For
Create an Integer Euclidean division Smt application.
Equations
- Blaster.Smt.edivSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.edivSymbol #[op1, op2]
Instances For
Create an Integer Euclidean modulo Smt application.
Equations
- Blaster.Smt.emodSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.emodSymbol #[op1, op2]
Instances For
Create an Integer truncate division Smt application.
Equations
- Blaster.Smt.tdivSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.tdivSymbol #[op1, op2]
Instances For
Create an Integer truncate modulo Smt application.
Equations
- Blaster.Smt.tmodSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.tmodSymbol #[op1, op2]
Instances For
Create an Integer floor division Smt application.
Equations
- Blaster.Smt.fdivSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.fdivSymbol #[op1, op2]
Instances For
Create an Integer floor modulo Smt application.
Equations
- Blaster.Smt.fmodSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.fmodSymbol #[op1, op2]
Instances For
Create an Integer to Nat Smt conversion.
Instances For
Create a native Integer power Smt application.
Equations
Instances For
Create an Integer power Smt application.
Equations
Instances For
Create a Nat subtraction Smt application
Equations
Instances For
Create a Nat division Smt application. NOTE: This is an alias to Int.ediv at Smt level.
Equations
- Blaster.Smt.natDivSmt op1 op2 = Blaster.Smt.edivSmt op1 op2
Instances For
Create a Nat modulo Smt application. NOTE: This is an alias to Int.emod at Smt level.
Equations
- Blaster.Smt.natModSmt op1 op2 = Blaster.Smt.emodSmt op2 op1
Instances For
Create an Nat power Smt application.
Equations
Instances For
Create an Integer absolute Smt application.
Equations
Instances For
Create a less than Smt application.
Equations
- Blaster.Smt.ltSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.ltSymbol #[op1, op2]
Instances For
Create a less than or equal to Smt application.
Equations
- Blaster.Smt.leqSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.leqSymbol #[op1, op2]
Instances For
Create an if-then-else Smt application.
Equations
Instances For
Create a String less than Smt application.
Equations
- Blaster.Smt.strLtSmt op1 op2 = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.strLtSymbol #[op1, op2]
Instances For
Create a String less than or equal to Smt application.
Equations
Instances For
Create a String append Smt application.
Equations
Instances For
Create a String replace Smt application.
Equations
- Blaster.Smt.strReplaceSmt s src dst = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.strReplaceSymbol #[s, src, dst]
Instances For
Create a String replace all Smt application.
Equations
- Blaster.Smt.strReplaceAllSmt s src dst = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.strReplaceAllSymbol #[s, src, dst]
Instances For
Create a String length Smt application.
Instances For
Create an as-array Smt application (i.e., converting a function to an array representation).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create a select Smt application (i.e., applying an fun array representation to its arguments).
Equations
- Blaster.Smt.selectSmt f args = Blaster.Smt.mkSimpleSmtAppN Blaster.Smt.selectSymbol (#[f] ++ args)
Instances For
Return true Smt term.
Instances For
Return false Smt term.
Instances For
Convert an Integer literal to an Smt representation.
Equations
Instances For
Convert an Nat literal to an Smt representation.
Equations
Instances For
Convert an String literal to an Smt representation.
Equations
- Blaster.Smt.strLitSmt s = Blaster.Smt.SmtTerm.StrTerm (toString "\"" ++ toString s ++ toString "\"")
Instances For
Create an Smt variable identifier.
Equations
Instances For
Create an Smt qualified variable identifier.
Equations
Instances For
Create an e-matching pattern to be used for a forall or an exists Smt term.
Equations
- Blaster.Smt.mkPattern patterns = Blaster.Smt.SmtAttribute.Pattern patterns
Instances For
Create a debug annotation name for a forall/exists Smt term.
Equations
Instances For
Annotate an Smt term with an optional list of attributes.
Equations
- Blaster.Smt.annotateTerm t none = t
- Blaster.Smt.annotateTerm t (some atts) = t.AnnotatedTerm atts
Instances For
Associate an optional name nm to an Smt term.
Equations
- Blaster.Smt.nameTerm t none = t
- Blaster.Smt.nameTerm t (some nmThm) = t.AnnotatedTerm #[Blaster.Smt.SmtAttribute.Named (Blaster.Smt.mkNormalSymbol nmThm)]
Instances For
Create a forall Smt Term, with quantifiers vars and body b.
An optional theorem name nmThm can be provided as well as
specific patterns to facilitate e-matching and debugging
during solving.
Equations
- Blaster.Smt.mkForallTerm nmThm vars b att = Blaster.Smt.nameTerm (Blaster.Smt.SmtTerm.ForallTerm vars (Blaster.Smt.annotateTerm b att)) nmThm
Instances For
Create an existential Smt Term, with quantifiers vars and body b.
An optional theorem name nmThm can be provided as well as
specific patterns to facilitate e-matching and debugging
during solving.
Equations
- Blaster.Smt.mkExistsTerm nmThm vars b att = Blaster.Smt.nameTerm (Blaster.Smt.SmtTerm.ExistsTerm vars (Blaster.Smt.annotateTerm b att)) nmThm
Instances For
Create a lambda Smt term with parameters args and body b.
Equations
- Blaster.Smt.mkLambdaTerm args b = Blaster.Smt.SmtTerm.LambdaTerm args b
Instances For
Create a let Smt term with bindings binds and body b.
Equations
- Blaster.Smt.mkLetTerm binds b = Blaster.Smt.SmtTerm.LetTerm binds b
Instances For
Helper functions. #
Append smt symbol nm with "_{s}".
Equations
Instances For
Return true when t := BoolTerm true.
Otherwise false.
Equations
Instances For
Return true when t := AppTerm idt args.
Otherwise false.
Equations
Instances For
Determine if t is an equality Smt expression and return it's corresponding arguments.
Otherwise return none.
Equations
- Blaster.Smt.eqSmt? (Blaster.Smt.SmtTerm.AppTerm (Blaster.Smt.SmtQualifiedIdent.SimpleIdent sym) args) = if (sym == Blaster.Smt.eqSymbol) = true then some (args[0]!, args[1]!) else none
- Blaster.Smt.eqSmt? t = none
Instances For
Determine if t is a not Smt expression and return its corresponding argument.
Otherwise return none.
Equations
- Blaster.Smt.notSmt? (Blaster.Smt.SmtTerm.AppTerm (Blaster.Smt.SmtQualifiedIdent.SimpleIdent sym) args) = if (sym == Blaster.Smt.notSymbol) = true then some args[0]! else none
- Blaster.Smt.notSmt? t = none
Instances For
Return true when t corresponds to ParamSort with name nm.
Otherwise false.
Equations
- Blaster.Smt.isParamSort (Blaster.Smt.SortExpr.ParamSort nm ps) sName = (nm == sName)
- Blaster.Smt.isParamSort (Blaster.Smt.SortExpr.SymbolSort nm) sName = false
Instances For
Return the smt symbol associated to the given Smt qualified identifier.