def
Strata.SMT.Encoder.encodeCore
(ctx : Core.SMT.Context)
(prelude : SolverM Unit)
(ts : List Term)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[reducible, inline]
Instances For
Equations
- Core.SMT.SMTModel.format [] = Std.Format.text ""
- Core.SMT.SMTModel.format [((k, snd), v)] = Std.format "(" ++ Std.format k ++ Std.format ", " ++ Std.format v ++ Std.format ")"
- Core.SMT.SMTModel.format (((k, snd), v) :: rest) = Std.format "(" ++ Std.format k ++ Std.format ", " ++ Std.format v ++ Std.format ") " ++ Core.SMT.SMTModel.format rest
Instances For
Equations
- Core.SMT.instToFormatSMTModel = { format := Core.SMT.SMTModel.format }
def
Core.SMT.getSMTId
(x : Lambda.IdentT Lambda.LMonoTy Visibility)
(ctx : Context)
(E : Strata.SMT.EncoderState)
:
Find the Id for the SMT encoding of x.
Equations
- One or more equations did not get rendered due to their size.
- Core.SMT.getSMTId (var, none) ctx E = Except.error (Std.format "Expected variable " ++ Std.format var ++ Std.format " to be annotated with a type!")
Instances For
Equations
- Core.SMT.getModel m = do let cex ← Strata.SMT.CExParser.parseCEx m pure cex.pairs
Instances For
def
Core.SMT.processModel
(vars : List (Lambda.IdentT Lambda.LMonoTy Visibility))
(cexs : List Strata.SMT.CExParser.KeyValue)
(ctx : Context)
(E : Strata.SMT.EncoderState)
:
Equations
Instances For
def
Core.SMT.processModel.findModelValue
(id : String)
(cexs : List Strata.SMT.CExParser.KeyValue)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.sat a) (Core.SMT.Result.sat b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.sat m) Core.SMT.Result.unsat = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.sat m) Core.SMT.Result.unknown = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.sat m) (Core.SMT.Result.err msg) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unsat (Core.SMT.Result.sat m) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unsat Core.SMT.Result.unsat = isTrue ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unsat Core.SMT.Result.unknown = isFalse Core.SMT.instDecidableEqResult.decEq._proof_8
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unsat (Core.SMT.Result.err msg) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unknown (Core.SMT.Result.sat m) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unknown Core.SMT.Result.unsat = isFalse Core.SMT.instDecidableEqResult.decEq._proof_11
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unknown Core.SMT.Result.unknown = isTrue ⋯
- Core.SMT.instDecidableEqResult.decEq Core.SMT.Result.unknown (Core.SMT.Result.err msg) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.err msg) (Core.SMT.Result.sat m) = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.err msg) Core.SMT.Result.unsat = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.err msg) Core.SMT.Result.unknown = isFalse ⋯
- Core.SMT.instDecidableEqResult.decEq (Core.SMT.Result.err a) (Core.SMT.Result.err b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Core.SMT.instReprResult.repr Core.SMT.Result.unsat prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Core.SMT.Result.unsat")).group prec✝
- Core.SMT.instReprResult.repr Core.SMT.Result.unknown prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Core.SMT.Result.unknown")).group prec✝
Instances For
Equations
- Core.SMT.instReprResult = { reprPrec := Core.SMT.instReprResult.repr }
Equations
- (Core.SMT.Result.sat a).formatWithVerbose verbose = if (!verbose || Map.isEmpty a) = true then Std.format "sat" else Std.format "sat\nModel: " ++ Std.format a
- Core.SMT.Result.unsat.formatWithVerbose verbose = Std.format "unsat"
- Core.SMT.Result.unknown.formatWithVerbose verbose = Std.format "unknown"
- (Core.SMT.Result.err a).formatWithVerbose verbose = Std.format "err " ++ Std.format a
Instances For
Equations
- Core.SMT.instToFormatResult = { format := fun (r : Core.SMT.Result) => r.formatWithVerbose true }
Equations
- (Core.SMT.Result.sat m).formatModelIfSat verbose = if (!verbose || Map.isEmpty m) = true then Std.format "" else Std.format "\nModel:\n" ++ Std.format m
- r.formatModelIfSat verbose = Std.format ""
Instances For
Equations
- Core.SMT.runSolver solver args = do let output ← IO.Process.output { cmd := solver, args := args } pure output
Instances For
def
Core.SMT.solverResult
(vars : List (Lambda.IdentT Lambda.LMonoTy Visibility))
(output : IO.Process.Output)
(ctx : Context)
(E : Strata.SMT.EncoderState)
(smtsolver : String)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.SMT.getSolverPrelude "z3" = do Strata.SMT.Solver.setOption "smt.mbqi" "false" Strata.SMT.Solver.setOption "auto_config" "false"
- Core.SMT.getSolverPrelude "cvc5" = pure ()
- Core.SMT.getSolverPrelude x✝ = pure ()
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Core.SMT.dischargeObligation
(options : Options)
(vars : List (Lambda.IdentT Lambda.LMonoTy Visibility))
(md : Imperative.MetaData Expression)
(filename : String)
(terms : List Strata.SMT.Term)
(ctx : Context)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Core.instReprOutcome.repr Core.Outcome.pass prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Core.Outcome.pass")).group prec✝
- Core.instReprOutcome.repr Core.Outcome.fail prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Core.Outcome.fail")).group prec✝
- Core.instReprOutcome.repr Core.Outcome.unknown prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Core.Outcome.unknown")).group prec✝
Instances For
Equations
- Core.instReprOutcome = { reprPrec := Core.instReprOutcome.repr }
Equations
Instances For
Equations
- Core.instDecidableEqOutcome.decEq Core.Outcome.pass Core.Outcome.pass = isTrue ⋯
- Core.instDecidableEqOutcome.decEq Core.Outcome.pass Core.Outcome.fail = isFalse Core.instDecidableEqOutcome.decEq._proof_1
- Core.instDecidableEqOutcome.decEq Core.Outcome.pass Core.Outcome.unknown = isFalse Core.instDecidableEqOutcome.decEq._proof_2
- Core.instDecidableEqOutcome.decEq Core.Outcome.pass (Core.Outcome.implementationError e) = isFalse ⋯
- Core.instDecidableEqOutcome.decEq Core.Outcome.fail Core.Outcome.pass = isFalse Core.instDecidableEqOutcome.decEq._proof_4
- Core.instDecidableEqOutcome.decEq Core.Outcome.fail Core.Outcome.fail = isTrue ⋯
- Core.instDecidableEqOutcome.decEq Core.Outcome.fail Core.Outcome.unknown = isFalse Core.instDecidableEqOutcome.decEq._proof_5
- Core.instDecidableEqOutcome.decEq Core.Outcome.fail (Core.Outcome.implementationError e) = isFalse ⋯
- Core.instDecidableEqOutcome.decEq Core.Outcome.unknown Core.Outcome.pass = isFalse Core.instDecidableEqOutcome.decEq._proof_7
- Core.instDecidableEqOutcome.decEq Core.Outcome.unknown Core.Outcome.fail = isFalse Core.instDecidableEqOutcome.decEq._proof_8
- Core.instDecidableEqOutcome.decEq Core.Outcome.unknown Core.Outcome.unknown = isTrue ⋯
- Core.instDecidableEqOutcome.decEq Core.Outcome.unknown (Core.Outcome.implementationError e) = isFalse ⋯
- Core.instDecidableEqOutcome.decEq (Core.Outcome.implementationError e) Core.Outcome.pass = isFalse ⋯
- Core.instDecidableEqOutcome.decEq (Core.Outcome.implementationError e) Core.Outcome.fail = isFalse ⋯
- Core.instDecidableEqOutcome.decEq (Core.Outcome.implementationError e) Core.Outcome.unknown = isFalse ⋯
- Core.instDecidableEqOutcome.decEq (Core.Outcome.implementationError a) (Core.Outcome.implementationError b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
A collection of all information relevant to a verification condition's analysis.
- obligation : Imperative.ProofObligation Expression
- smtResult : SMT.Result
- result : Outcome
- estate : Strata.SMT.EncoderState
- verbose : VerboseMode
Instances For
Map the result from an SMT backend engine to an Outcome.
Equations
- Core.smtResultToOutcome Core.SMT.Result.unknown isCover = Core.Outcome.unknown
- Core.smtResultToOutcome Core.SMT.Result.unsat isCover = if isCover = true then Core.Outcome.fail else Core.Outcome.pass
- Core.smtResultToOutcome (Core.SMT.Result.sat m) isCover = if isCover = true then Core.Outcome.pass else Core.Outcome.fail
- Core.smtResultToOutcome (Core.SMT.Result.err e) isCover = Core.Outcome.implementationError e
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Instances For
Instances For
Equations
- vr.isImplementationError = match vr.result with | Core.Outcome.implementationError e => true | x => false
Instances For
Equations
- vcResult.isNotSuccess = !vcResult.isSuccess
Instances For
@[reducible, inline]
Equations
Instances For
Equations
- rs.format = Std.Format.joinSep (Array.map (fun (r : Core.VCResult) => Std.format Std.Format.line ++ Std.format r) rs).toList Std.Format.line
Instances For
Equations
- Core.instToFormatVCResults = { format := Core.VCResults.format }
Equations
- Core.instToStringVCResults = { toString := fun (rs : Core.VCResults) => toString rs.format }
def
Core.preprocessObligation
(obligation : Imperative.ProofObligation Expression)
(p : Program)
(options : Options)
:
Preprocess a proof obligation before handing it off to a backend engine.
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Core.getObligationResult
(terms : List Strata.SMT.Term)
(ctx : SMT.Context)
(obligation : Imperative.ProofObligation Expression)
(p : Program)
(options : Options)
(counter : IO.Ref Nat)
(tempDir : System.FilePath)
:
Invoke a backend engine and get the analysis result for a given proof obligation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Core.verifySingleEnv
(pE : Program × Env)
(options : Options)
(counter : IO.Ref Nat)
(tempDir : System.FilePath)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Core.verify
(program : Program)
(tempDir : System.FilePath)
(proceduresToVerify : Option (List String) := none)
(options : Options := Options.default)
(moreFns : Lambda.Factory CoreLParams := Lambda.Factory.default)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Strata.typeCheck
(ictx : Parser.InputContext)
(env : Program)
(options : Options := Options.default)
(moreFns : Lambda.Factory Core.CoreLParams := Lambda.Factory.default)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Strata.Core.getProgram p ictx = Strata.TransM.run ictx (Strata.translateProgram p)
Instances For
def
Strata.verify
(env : Program)
(ictx : Parser.InputContext := default)
(proceduresToVerify : Option (List String) := none)
(options : Options := Options.default)
(moreFns : Lambda.Factory Core.CoreLParams := Lambda.Factory.default)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
- start : Lean.Position
- ending : Lean.Position
- message : String
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Strata.instReprDiagnostic = { reprPrec := Strata.instReprDiagnostic.repr }
Equations
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Strata.Core.VCResult.toDiagnostic files vcr = Option.map (fun (dm : Strata.DiagnosticModel) => Strata.DiagnosticModel.toDiagnostic files dm) (Strata.toDiagnosticModel vcr)