Cairn · module

Cairn.Claims.Elab

lean/Cairn/Claims/Elab.lean

The claim commands: move, flow, invariant, assume, place and retire, and the moves% and claims% terms. See docs/claims.md for the syntax and what each check guarantees.

Each command elaborates to ordinary declarations (definitions for the formal statement, theorems for the evidence, a ClaimInfo and a value of the claim's structure) and records an Entry in the registry. Every check happens here, at compile time:

  • an id is issued once in the whole imported environment;
  • every claim has a title and says what it does (does); a move also says what follows (sees);
  • in ^P names a place that exists;
  • a move has a handler per trigger, and each handler has apply (or emit), post and a sound proof, so a move without a proof does not compile;
  • a flow's witness names moves that exist, and its live and reaches proofs check;
  • a retired id says why;
  • no move is declared after moves% collected its namespace, and no claim after claims%.

Imports Lean, Cairn.Claims.Core, Cairn.Claims.Registry

Order

Structures 1

structure

Cairn.Claims.Clauses

lean/Cairn/Claims/Elab.lean:120
Clauses : Type

The clauses of one claim, checked against the names its kind allows.

Fields
items : Array Item

Inductive types 1

inductive

Cairn.Claims.Item

lean/Cairn/Claims/Elab.lean:83
Item : Type
Constructors
prose (name : Lean.Syntax) (val : String) : Item
defn (name : Lean.Syntax) (binders : Array Lean.Syntax)
  (rhs : Lean.Term) : Item
on (trigger : Lean.Syntax) (op : Option (Lean.Ident × Lean.Term))
  (items : Array Item) : Item
witness (ref : Lean.Syntax) (steps : Array Lean.Syntax) : Item
Instances

Inhabited

Definitions 62

def

Cairn.Claims.claimKw

lean/Cairn/Claims/Elab.lean:38
claimKw (s : String) : Lean.Parser.Parser

A command keyword that is not reserved.

def

Cairn.Claims.moveKw

lean/Cairn/Claims/Elab.lean:41
moveKw : Lean.Parser.Parser
def

Cairn.Claims.flowKw

lean/Cairn/Claims/Elab.lean:42
flowKw : Lean.Parser.Parser
def

Cairn.Claims.invariantKw

lean/Cairn/Claims/Elab.lean:43
invariantKw : Lean.Parser.Parser
def

Cairn.Claims.assumeKw

lean/Cairn/Claims/Elab.lean:44
assumeKw : Lean.Parser.Parser
def

Cairn.Claims.placeKw

lean/Cairn/Claims/Elab.lean:45
placeKw : Lean.Parser.Parser
def

Cairn.Claims.retireKw

lean/Cairn/Claims/Elab.lean:46
retireKw : Lean.Parser.Parser
def

Cairn.Claims.claimRef

lean/Cairn/Claims/Elab.lean:50
claimRef : Lean.ParserDescr

A claim id, ^N.

def

Cairn.Claims.claimStep

lean/Cairn/Claims/Elab.lean:52
claimStep : Lean.ParserDescr

One action of a flow's witness: press ^1, press ^5#12, edit ^3 (.insert "a").

def

Cairn.Claims.claimItem

lean/Cairn/Claims/Elab.lean:54
claimItem : Lean.ParserDescr

A prose clause (does "…") or a definition clause (post s' := …, sound := by …).

def

Cairn.Claims.claimWitness

lean/Cairn/Claims/Elab.lean:55
claimWitness : Lean.ParserDescr
def

Cairn.Claims.claimOn

lean/Cairn/Claims/Elab.lean:57
claimOn : Lean.ParserDescr

A move's handler for one trigger: on press, on edit (op : TextOp).

def

Cairn.Claims.claimClause

lean/Cairn/Claims/Elab.lean:58
claimClause : Lean.ParserDescr
def

Cairn.Claims.claimBinder

lean/Cairn/Claims/Elab.lean:59
claimBinder : Lean.ParserDescr
def

Cairn.Claims.claimIn

lean/Cairn/Claims/Elab.lean:60
claimIn : Lean.ParserDescr
def

Cairn.Claims.moveCmd

lean/Cairn/Claims/Elab.lean:62
moveCmd : Lean.ParserDescr
def

Cairn.Claims.flowCmd

lean/Cairn/Claims/Elab.lean:64
flowCmd : Lean.ParserDescr
def

Cairn.Claims.invariantCmd

lean/Cairn/Claims/Elab.lean:66
invariantCmd : Lean.ParserDescr
def

Cairn.Claims.assumeCmd

lean/Cairn/Claims/Elab.lean:68
assumeCmd : Lean.ParserDescr
def

Cairn.Claims.placeCmd

lean/Cairn/Claims/Elab.lean:70
placeCmd : Lean.ParserDescr
def

Cairn.Claims.retireCmd

lean/Cairn/Claims/Elab.lean:73
retireCmd : Lean.ParserDescr

A retired id: the claim is gone, its id stays issued.

def

Cairn.Claims.movesTerm

lean/Cairn/Claims/Elab.lean:76
movesTerm : Lean.ParserDescr

The moves declared in a namespace (the current one by default), as a list.

def

Cairn.Claims.claimsTerm

lean/Cairn/Claims/Elab.lean:79
claimsTerm : Lean.ParserDescr

The ClaimInfo of every claim declared in a namespace (the current one by default), including retired ids, ordered by id.

def

Cairn.Claims.Item.ref

lean/Cairn/Claims/Elab.lean:90
ref : Item → Lean.Syntax
def

Cairn.Claims.Item.key

lean/Cairn/Claims/Elab.lean:93
key : Item → String
def

Cairn.Claims.parseItem

lean/Cairn/Claims/Elab.lean:98
parseItem (stx : Lean.Syntax) : Lean.Elab.Command.CommandElabM Item
def

Cairn.Claims.parseClause

lean/Cairn/Claims/Elab.lean:106
parseClause (stx : Lean.Syntax) : Lean.Elab.Command.CommandElabM Item
def

Cairn.Claims.refId

lean/Cairn/Claims/Elab.lean:117
refId (stx : Lean.Syntax) : ClaimId
def

Cairn.Claims.Clauses.read

lean/Cairn/Claims/Elab.lean:123
read (body : Lean.Syntax) (allowed : List String) (kind : String) :
  Lean.Elab.Command.CommandElabM Clauses
def

Cairn.Claims.Clauses.prose?

lean/Cairn/Claims/Elab.lean:137
prose? (c : Clauses) (n : String) : Option String
def

Cairn.Claims.Clauses.defn?

lean/Cairn/Claims/Elab.lean:140
defn? (c : Clauses) (n : String) :
  Option (Lean.Syntax × Array Lean.Syntax × Lean.Term)
def

Cairn.Claims.needDefn

lean/Cairn/Claims/Elab.lean:146
needDefn (items : Array Item) (ref : Lean.Syntax) (n what : String)
  (arity : Nat) : Lean.Elab.Command.CommandElabM (Array Lean.Syntax × Lean.Term)

A definition clause that must be present, with exactly arity binders.

def

Cairn.Claims.optDefn

lean/Cairn/Claims/Elab.lean:155
optDefn (items : Array Item) (n : String) (arity : Nat) :
  Lean.Elab.Command.CommandElabM (Option (Array Lean.Syntax × Lean.Term))
def

Cairn.Claims.needProse

lean/Cairn/Claims/Elab.lean:164
needProse (c : Clauses) (ref : Lean.Syntax) (n what : String) :
  Lean.Elab.Command.CommandElabM String
def

Cairn.Claims.checkTitle

lean/Cairn/Claims/Elab.lean:173
checkTitle (ref : Lean.Syntax) (title : String) :
  Lean.Elab.Command.CommandElabM Unit
def

Cairn.Claims.currentScope

lean/Cairn/Claims/Elab.lean:179
currentScope : Lean.CoreM String

The package scope this module's claims are declared in (cairn.claims.scope).

def

Cairn.Claims.checkFresh

lean/Cairn/Claims/Elab.lean:182
checkFresh (ref : Lean.Syntax) (id : ClaimId) :
  Lean.Elab.Command.CommandElabM Unit

An id is issued once per scope in the whole imported environment.

def

Cairn.Claims.checkPlace

lean/Cairn/Claims/Elab.lean:193
checkPlace (stx : Lean.Syntax) :
  Lean.Elab.Command.CommandElabM (Option ClaimId)
def

Cairn.Claims.checkUnsealed

lean/Cairn/Claims/Elab.lean:206
checkUnsealed (ref : Lean.Syntax) (dispatched : Bool) :
  Lean.Elab.Command.CommandElabM Unit
def

Cairn.Claims.register

lean/Cairn/Claims/Elab.lean:215
register (e : Entry) : Lean.Elab.Command.CommandElabM Unit
def

Cairn.Claims.lit

lean/Cairn/Claims/Elab.lean:221
lit (n : Nat) : Lean.Term
def

Cairn.Claims.strLit

lean/Cairn/Claims/Elab.lean:222
strLit (s : String) : Lean.Term
def

Cairn.Claims.cid

lean/Cairn/Claims/Elab.lean:224
cid (n : Lean.Name) : Lean.Ident
def

Cairn.Claims.binder

lean/Cairn/Claims/Elab.lean:228
binder (x : Lean.Syntax) (t : Lean.Term) :
  Lean.Elab.Command.CommandElabM (Lean.TSyntax `Lean.Parser.Term.bracketedBinder)

An explicit binder from a name the user wrote: an identifier, or a binderIdent (which may be _).

def

Cairn.Claims.mkDef

lean/Cairn/Claims/Elab.lean:234
mkDef (name : Lean.Name) (bs : Array (Lean.Syntax × Lean.Term))
  (type body : Lean.Term) (doc : String := "") (reducible : Bool := false) :
  Lean.Elab.Command.CommandElabM Unit

def name binders : type := body, then its doc string.

def

Cairn.Claims.mkThm

lean/Cairn/Claims/Elab.lean:248
mkThm (name : Lean.Name) (type proof : Lean.Term) (doc : String := "") :
  Lean.Elab.Command.CommandElabM Unit
def

Cairn.Claims.foralls

lean/Cairn/Claims/Elab.lean:253
foralls (bs : Array (Lean.Ident × Lean.Term)) (body : Lean.Term) :
  Lean.Elab.Command.CommandElabM Lean.Term
def

Cairn.Claims.app

lean/Cairn/Claims/Elab.lean:256
app (f : Lean.Name) (args : Array Lean.Term) : Lean.Term
def

Cairn.Claims.mkInfo

lean/Cairn/Claims/Elab.lean:258
mkInfo (name : Lean.Name) (id : ClaimId) (kind : Lean.Name)
  (title does sees : String) (place : Option ClaimId) (retired : Option String := none) :
  Lean.Elab.Command.CommandElabM Unit
def

Cairn.Claims.docOf

lean/Cairn/Claims/Elab.lean:282
docOf (doc? : Option Lean.Syntax) (fallback : String) :
  Lean.Elab.Command.CommandElabM String
def

Cairn.Claims.triggers

lean/Cairn/Claims/Elab.lean:287
triggers : List (String × Lean.Name)
def

Cairn.Claims.elabMove

lean/Cairn/Claims/Elab.lean:295
elabMove : Lean.Elab.Command.CommandElab
def

Cairn.Claims.stepAction

lean/Cairn/Claims/Elab.lean:447
stepAction (step : Lean.Syntax) :
  Lean.Elab.Command.CommandElabM (Lean.Term × ClaimId)
def

Cairn.Claims.elabFlow

lean/Cairn/Claims/Elab.lean:470
elabFlow : Lean.Elab.Command.CommandElab
def

Cairn.Claims.decidableUnfolds

lean/Cairn/Claims/Elab.lean:523
decidableUnfolds (holds : Lean.Name) (SM : Lean.Term) :
  Lean.Elab.Command.CommandElabM (Option (Array Lean.Name))

The definitions to unfold, from holds down its body's head, before Decidable of the property can be synthesized; none when it can't be, even after unfolding a few.

def

Cairn.Claims.elabInvariant

lean/Cairn/Claims/Elab.lean:539
elabInvariant : Lean.Elab.Command.CommandElab
def

Cairn.Claims.elabAssume

lean/Cairn/Claims/Elab.lean:609
elabAssume : Lean.Elab.Command.CommandElab
def

Cairn.Claims.elabPlace

lean/Cairn/Claims/Elab.lean:641
elabPlace : Lean.Elab.Command.CommandElab
def

Cairn.Claims.elabRetire

lean/Cairn/Claims/Elab.lean:663
elabRetire : Lean.Elab.Command.CommandElab
def

Cairn.Claims.nsOf

lean/Cairn/Claims/Elab.lean:684
nsOf (stx : Lean.Syntax) : Lean.Elab.TermElabM Lean.Name
def

Cairn.Claims.elabMoves

lean/Cairn/Claims/Elab.lean:689
elabMoves : Lean.Elab.Term.TermElab
def

Cairn.Claims.elabClaims

lean/Cairn/Claims/Elab.lean:697
elabClaims : Lean.Elab.Term.TermElab

Instances 1

instance

Cairn.Claims.instInhabitedItem

lean/Cairn/Claims/Elab.lean:88
instInhabitedItem : Inhabited Item