Additional version description like "nightly-2018-03-11"
Equations
- Lean.versionStringCore = toString Lean.version.major ++ "." ++ toString Lean.version.minor ++ "." ++ toString Lean.version.patch
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.isIdFirst c = (Char.isAlpha c || decide (c = Char.ofNat 95) || Lean.isLetterLike c)
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
Equations
- Lean.Name.getRoot Lean.Name.anonymous = Lean.Name.anonymous
- Lean.Name.getRoot (Lean.Name.str Lean.Name.anonymous str) = Lean.Name.str Lean.Name.anonymous str
- Lean.Name.getRoot (Lean.Name.num Lean.Name.anonymous i) = Lean.Name.num Lean.Name.anonymous i
- Lean.Name.getRoot (Lean.Name.str n str) = Lean.Name.getRoot n
- Lean.Name.getRoot (Lean.Name.num n i) = Lean.Name.getRoot n
Equations
- Lean.Name.isInaccessibleUserName (Lean.Name.str pre s) = (String.contains s (Char.ofNat 10013) || s == "_inaccessible")
- Lean.Name.isInaccessibleUserName (Lean.Name.num p i) = Lean.Name.isInaccessibleUserName p
- Lean.Name.isInaccessibleUserName x = false
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Name.toStringWithSep sep escape Lean.Name.anonymous = "[anonymous]"
- Lean.Name.toStringWithSep sep escape (Lean.Name.str Lean.Name.anonymous s) = Lean.Name.toStringWithSep.maybeEscape escape s
- Lean.Name.toStringWithSep sep escape (Lean.Name.num Lean.Name.anonymous v) = toString v
- Lean.Name.toStringWithSep sep escape (Lean.Name.str n s) = Lean.Name.toStringWithSep sep escape n ++ sep ++ Lean.Name.toStringWithSep.maybeEscape escape s
- Lean.Name.toStringWithSep sep escape (Lean.Name.num n v) = Lean.Name.toStringWithSep sep escape n ++ sep ++ Nat.repr v
Equations
- Lean.Name.toStringWithSep.maybeEscape escape s = if escape = true then Option.getD (Lean.Name.escapePart s) s else s
Equations
- Lean.Name.toString.maybePseudoSyntax n = match Lean.Name.getRoot n with | Lean.Name.str pre s => String.isPrefixOf "#" s || String.isPrefixOf "?" s | x => false
Equations
- Lean.Name.instToStringName = { toString := fun n => Lean.Name.toString n }
Equations
- One or more equations did not get rendered due to their size.
- Lean.Name.reprPrec Lean.Name.anonymous prec = Std.Format.text "Lean.Name.anonymous"
- Lean.Name.reprPrec (Lean.Name.num pre i) prec = Repr.addAppParen (Std.Format.text "Lean.Name.mkNum " ++ Lean.Name.reprPrec pre 1024 ++ Std.Format.text " " ++ repr i) prec
Equations
- Lean.Name.instReprName = { reprPrec := Lean.Name.reprPrec }
Equations
- Lean.Name.capitalize x = match x with | Lean.Name.str p s => Lean.Name.str p (String.capitalize s) | n => n
Equations
- Lean.Name.replacePrefix Lean.Name.anonymous Lean.Name.anonymous x = x
- Lean.Name.replacePrefix Lean.Name.anonymous x x = Lean.Name.anonymous
- Lean.Name.replacePrefix (Lean.Name.str p s) x x = if (Lean.Name.str p s == x) = true then x else Lean.Name.mkStr (Lean.Name.replacePrefix p x x) s
- Lean.Name.replacePrefix (Lean.Name.num p s) x x = if (Lean.Name.num p s == x) = true then x else Lean.Name.mkNum (Lean.Name.replacePrefix p x x) s
eraseSuffix? n s
return n'
if n
is of the form n == n' ++ s
.
Equations
- Lean.Name.appendAfter n suffix = Lean.Name.modifyBase n fun x => match x with | Lean.Name.str p s => Lean.Name.mkStr p (s ++ suffix) | n => Lean.Name.mkStr n suffix
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.instInhabitedNameGenerator = { default := { namePrefix := default, idx := default } }
Equations
- Lean.NameGenerator.curr g = Lean.Name.mkNum g.namePrefix g.idx
Equations
- Lean.NameGenerator.next g = { namePrefix := g.namePrefix, idx := g.idx + 1 }
Equations
- Lean.NameGenerator.mkChild g = ({ namePrefix := Lean.Name.mkNum g.namePrefix g.idx, idx := 1 }, { namePrefix := g.namePrefix, idx := g.idx + 1 })
- getNGen : m Lean.NameGenerator
- setNGen : Lean.NameGenerator → m Unit
Instances
Equations
- Lean.mkFreshId = do let ngen ← Lean.getNGen let r : Lean.Name := Lean.NameGenerator.curr ngen Lean.setNGen (Lean.NameGenerator.next ngen) pure r
Equations
- Lean.monadNameGeneratorLift m n = { getNGen := liftM Lean.getNGen, setNGen := fun ngen => liftM (Lean.setNGen ngen) }
Equations
- Lean.Syntax.instReprPreresolved = { reprPrec := Lean.Syntax.reprPreresolved✝ }
Equations
- Lean.Syntax.instReprSyntax = { reprPrec := Lean.Syntax.reprSyntax✝ }
Equations
- Lean.Syntax.instReprTSyntax = { reprPrec := Lean.Syntax.reprTSyntax✝ }
Equations
Equations
Equations
- Lean.TSyntax.instCoeTSyntaxConsSyntaxNodeKindNil = { coe := fun stx => { raw := stx.raw } }
Equations
- Lean.TSyntax.instCoeTSyntaxConsSyntaxNodeKind = { coe := fun stx => { raw := stx.raw } }
Equations
- Lean.TSyntax.instCoeIdentTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeDepTermMkConsSyntaxNodeKindMkStr1NilIdentIdent = { coe := { raw := Lean.Syntax.ident info ss n res } }
Equations
- Lean.TSyntax.instCoeStrLitTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeNameLitTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeScientificLitTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeNumLitTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeCharLitTerm = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeIdentLevel = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeNumLitPrio = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.instCoeNumLitPrec = { coe := fun s => { raw := s.raw } }
Equations
- Lean.TSyntax.Compat.instCoeTailSyntaxTSyntax = { coe := fun s => { raw := s } }
Equations
- Lean.TSyntax.Compat.instCoeTailArraySyntaxTSyntaxArray = { coe := Lean.TSyntaxArray.mk }
Equations
Compare syntax structures modulo source info.
Equations
- Lean.Syntax.instBEqSyntax = { beq := Lean.Syntax.structEq }
Equations
Equations
- Lean.Syntax.getTrailingSize stx = match Lean.Syntax.getTailInfo? stx with | some (Lean.SourceInfo.original leading pos trailing endPos) => Substring.bsize trailing | x => 0
Return substring of original input covering stx
.
Result is meaningful only if all involved SourceInfo.original
s refer to the same string (as is the case after parsing).
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.setTailInfo stx info = match Lean.Syntax.setTailInfoAux info stx with | some stx => stx | none => stx
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.setHeadInfo stx info = match Lean.Syntax.setHeadInfoAux info stx with | some stx => stx | none => stx
Equations
- One or more equations did not get rendered due to their size.
Return the first atom/identifier that has position information
Equations
- Lean.Syntax.copyHeadTailInfoFrom target source = Lean.Syntax.setTailInfo (Lean.Syntax.setHeadInfo target (Lean.Syntax.getHeadInfo source)) (Lean.Syntax.getTailInfo source)
Ensure head position is synthetic. The server regards syntax as "original" only if both head and tail info are original
.
Equations
Use the head atom/identifier of the current ref
as the ref
Equations
- Lean.withHeadRefOnly x = do let __do_lift ← Lean.getRef match Lean.Syntax.getHead? __do_lift with | none => x | some ref => Lean.withRef ref x
Equations
- Lean.mkNode k args = { raw := Lean.Syntax.node Lean.SourceInfo.none k args }
Expand macros in the given syntax.
A node with kind k
is visited only if p k
is true.
Note that the default value for p
returns false for by ...
nodes.
This is a "hack". The tactic framework abuses the macro system to implement extensible tactics.
For example, one can define
syntax "my_trivial" : tactic -- extensible tactic
macro_rules | `(tactic| my_trivial) => `(tactic| decide)
macro_rules | `(tactic| my_trivial) => `(tactic| assumption)
When the tactic evaluator finds the tactic my_trivial
, it tries to evaluate the macro_rule
expansions
until one "works", i.e., the macro expansion is evaluated without producing an exception.
We say this solution is a bit hackish because the term elaborator may invoke expandMacros
with (p := fun _ => true)
,
and expand the tactic macros as just macros. In the example above, my_trivial
would be replaced with assumption
,
decide
would not be tried if assumption
fails at tactic evaluation time.
We are considering two possible solutions for this issue: 1- A proper extensible tactic feature that does not rely on the macro system.
2- Typed macros that know the syntax categories they're working in. Then, we would be able to select which
syntatic categories are expanded by expandMacros
.
Helper functions for processing Syntax programmatically #
Create an identifier copying the position from src
.
To refer to a specific constant, use mkCIdentFrom
instead.
Equations
- Lean.mkIdentFrom src val canonical = { raw := Lean.Syntax.ident (Lean.SourceInfo.fromRef src canonical) (String.toSubstring (toString val)) val [] }
Equations
- Lean.mkIdentFromRef val canonical = do let __do_lift ← Lean.getRef pure (Lean.mkIdentFrom __do_lift val canonical)
Create an identifier referring to a constant c
copying the position from src
.
This variant of mkIdentFrom
makes sure that the identifier cannot accidentally
be captured.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.mkCIdentFromRef c canonical = do let __do_lift ← Lean.getRef pure (Lean.mkCIdentFrom __do_lift c canonical).raw
Equations
Equations
- Lean.mkIdent val = { raw := Lean.Syntax.ident Lean.SourceInfo.none (String.toSubstring (toString val)) val [] }
Equations
- Lean.mkNullNode args = (Lean.mkNode Lean.nullKind args).raw
Equations
- Lean.mkGroupNode args = (Lean.mkNode Lean.groupKind args).raw
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.mkOptionalNode arg = match arg with | some arg => Lean.mkNullNode #[arg] | none => Lean.mkNullNode
Equations
- Lean.mkHole ref canonical = (Lean.mkNode `Lean.Parser.Term.hole #[Lean.mkAtomFrom ref "_" canonical]).raw
Equations
- Lean.Syntax.mkSep a sep = Lean.mkNullNode (Lean.mkSepArray a sep)
Equations
- Lean.Syntax.SepArray.ofElems elems = { elemsAndSeps := Lean.mkSepArray elems (if String.isEmpty sep = true then Lean.mkNullNode else Lean.mkAtom sep) }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.instCoeArraySyntaxSepArray = { coe := Lean.Syntax.SepArray.ofElems }
Equations
- Lean.Syntax.instCoeTSyntaxArrayTSepArray = { coe := fun a => { elemsAndSeps := Lean.mkSepArray (Lean.TSyntaxArray.raw a) (Lean.mkAtom sep) } }
Create syntax representing a Lean term application, but avoid degenerate empty applications.
Equations
- Lean.Syntax.mkApp fn x = match x with | #[] => fn | args => { raw := (Lean.mkNode `Lean.Parser.Term.app #[fn.raw, Lean.mkNullNode (Lean.TSyntaxArray.raw args)]).raw }
Equations
- Lean.Syntax.mkCApp fn args = Lean.Syntax.mkApp { raw := (Lean.mkCIdent fn).raw } args
Equations
- Lean.Syntax.mkLit kind val info = let atom := Lean.Syntax.atom info val; Lean.mkNode kind #[atom]
Equations
- Lean.Syntax.mkStrLit val info = Lean.Syntax.mkLit Lean.strLitKind (String.quote val) info
Equations
- Lean.Syntax.mkNumLit val info = Lean.Syntax.mkLit Lean.numLitKind val info
Equations
- Lean.Syntax.mkScientificLit val info = Lean.Syntax.mkLit Lean.scientificLitKind val info
Equations
- Lean.Syntax.mkNameLit val info = Lean.Syntax.mkLit Lean.nameLitKind val info
Recall that we don't have special Syntax constructors for storing numeric and string atoms.
The idea is to have an extensible approach where embedded DSLs may have new kind of atoms and/or
different ways of representing them. So, our atoms contain just the parsed string.
The main Lean parser uses the kind numLitKind
for storing natural numbers that can be encoded
in binary, octal, decimal and hexadecimal format. isNatLit
implements a "decoder"
for Syntax objects representing these numerals.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
Decodes a 'scientific number' string which is consumed by the OfScientific
class.
Takes as input a string such as 123
, 123.456e7
and returns a triple (n, sign, e)
with value given by
n * 10^-e
if sign
else n * 10^e
.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.isScientificLit? stx = match Lean.Syntax.isLit? Lean.scientificLitKind stx with | some val => Lean.Syntax.decodeScientificLitVal? val | x => none
Equations
- Lean.Syntax.isIdOrAtom? x = match x with | Lean.Syntax.atom info val => some val | Lean.Syntax.ident info rawVal val preresolved => some (Substring.toString rawVal) | x => none
Equations
- Lean.Syntax.toNat stx = match Lean.Syntax.isNatLit? stx with | some val => val | none => 0
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.decodeStrLit s = Lean.Syntax.decodeStrLitAux s { byteIdx := 1 } ""
Equations
- Lean.Syntax.isStrLit? stx = match Lean.Syntax.isLit? Lean.strLitKind stx with | some val => Lean.Syntax.decodeStrLit val | x => none
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.isCharLit? stx = match Lean.Syntax.isLit? Lean.charLitKind stx with | some val => Lean.Syntax.decodeCharLit val | x => none
Split a name literal (without the backtick) into its dot-separated components. For example,
foo.bla.«bo.o»
↦ ["foo", "bla", "«bo.o»"]
. If the literal cannot be parsed, return []
.
Equations
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.isNameLit? stx = match Lean.Syntax.isLit? Lean.nameLitKind stx with | some val => Lean.Syntax.decodeNameLit val | x => none
Equations
- Lean.Syntax.hasArgs x = match x with | Lean.Syntax.node info kind args => decide (Array.size args > 0) | x => false
Equations
- Lean.Syntax.isAtom x = match x with | Lean.Syntax.atom info val => true | x => false
Equations
- Lean.Syntax.isToken token x = match x with | Lean.Syntax.atom info val => String.trim val == String.trim token | x => false
Equations
- Lean.Syntax.isNone stx = match stx with | Lean.Syntax.node info k args => k == Lean.nullKind && Array.size args == 0 | Lean.Syntax.missing => true | x => false
Equations
- Lean.Syntax.getOptionalIdent? stx = match Lean.Syntax.getOptional? stx with | some stx => some (Lean.Syntax.getId stx) | none => none
Equations
- Lean.Syntax.find? stx p = Lean.Syntax.findAux p stx
Equations
- Lean.TSyntax.getNat s = Option.getD (Lean.Syntax.isNatLit? s.raw) 0
Equations
- Lean.TSyntax.getId s = Lean.Syntax.getId s.raw
Equations
- Lean.TSyntax.getScientific s = Option.getD (Lean.Syntax.isScientificLit? s.raw) (0, false, 0)
Equations
- Lean.TSyntax.getString s = Option.getD (Lean.Syntax.isStrLit? s.raw) ""
Equations
- Lean.TSyntax.getChar s = Option.getD (Lean.Syntax.isCharLit? s.raw) default
Equations
Equations
- Lean.TSyntax.Compat.instCoeTailArraySyntaxTSepArray = { coe := fun a => { elemsAndSeps := Lean.mkSepArray (Lean.TSyntaxArray.raw (Lean.TSyntaxArray.mk a)) (Lean.mkAtom sep) } }
Equations
- Lean.instQuote = Lean.Quote.mk k' fun a => CoeHTCT.coe (Lean.quote k a)
Equations
- Lean.instQuoteTermMkStr1 = Lean.Quote.mk `term id
Equations
- Lean.instQuoteBoolMkStr1 = Lean.Quote.mk `term fun x => match x with | true => { raw := (Lean.mkCIdent `Bool.true).raw } | false => { raw := (Lean.mkCIdent `Bool.false).raw }
Equations
- Lean.instQuoteStringStrLitKind = Lean.Quote.mk Lean.strLitKind fun val => Lean.Syntax.mkStrLit val
Equations
Equations
- Lean.instQuoteSubstringMkStr1 = Lean.Quote.mk `term fun s => Lean.Syntax.mkCApp `String.toSubstring' #[Lean.quote `term (Substring.toString s)]
Equations
- Lean.quoteNameMk Lean.Name.anonymous = { raw := (Lean.mkCIdent `Lean.Name.anonymous).raw }
- Lean.quoteNameMk (Lean.Name.str p s) = Lean.Syntax.mkCApp `Lean.Name.mkStr #[Lean.quoteNameMk p, Lean.quote `term s]
- Lean.quoteNameMk (Lean.Name.num p n) = Lean.Syntax.mkCApp `Lean.Name.mkNum #[Lean.quoteNameMk p, Lean.quote `term n]
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.instQuoteProdMkStr1 = Lean.Quote.mk `term fun x => match x with | (a, b) => Lean.Syntax.mkCApp `Prod.mk #[Lean.quote `term a, Lean.quote `term b]
Equations
- Lean.instQuoteListMkStr1 = Lean.Quote.mk `term Lean.quoteList
Equations
- Lean.instQuoteArrayMkStr1 = Lean.Quote.mk `term Lean.quoteArray
Equations
- One or more equations did not get rendered due to their size.
Evaluator for prec
DSL
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.termEval_prec_ = Lean.ParserDescr.node `Lean.termEval_prec_ 1022 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "eval_prec ") (Lean.ParserDescr.cat `prec 1024))
Evaluator for prio
DSL
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.termEval_prio_ = Lean.ParserDescr.node `Lean.termEval_prio_ 1022 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "eval_prio ") (Lean.ParserDescr.cat `prio 1024))
Equations
- Lean.evalOptPrio x = match x with | some prio => Lean.evalPrio prio.raw | none => pure 1000
Equations
Equations
- Array.filterSepElemsM a p = Array.filterSepElemsMAux a p 0 #[]
Equations
- Array.filterSepElems a p = Id.run (Array.filterSepElemsM a p)
Equations
- Array.mapSepElemsM a f = Array.mapSepElemsMAux a f 0 #[]
Equations
- Array.mapSepElems a f = Id.run (Array.mapSepElemsM a f)
Equations
- Lean.Syntax.SepArray.getElems sa = Array.getSepElems sa.elemsAndSeps
Equations
- Lean.Syntax.TSepArray.getElems sa = Lean.TSyntaxArray.mk (Array.getSepElems sa.elemsAndSeps)
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Syntax.instCoeOutSepArrayArraySyntax = { coe := Lean.Syntax.SepArray.getElems }
Equations
- Lean.Syntax.instCoeOutTSepArrayTSyntaxArray = { coe := Lean.Syntax.TSepArray.getElems }
Equations
- Lean.Syntax.instCoeOutTSyntaxArrayArraySyntax = { coe := fun a => Lean.TSyntaxArray.raw a }
Equations
- Lean.Syntax.instCoeIdentTSyntaxConsSyntaxNodeKindMkStr4Nil = { coe := fun id => Lean.mkNode `Lean.Parser.Command.declId #[id.raw, Lean.mkNullNode] }
Equations
- Lean.Syntax.instCoeTermTSyntaxConsSyntaxNodeKindMkStr4Nil = { coe := fun stx => { raw := stx.raw } }
Helper functions for manipulating interpolated strings #
Equations
- Lean.Syntax.isInterpolatedStrLit? stx = match Lean.Syntax.isLit? Lean.interpolatedStrLitKind stx with | none => none | some val => Lean.Syntax.decodeInterpStrLit val
Equations
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
- all: Lean.Meta.TransparencyMode
- default: Lean.Meta.TransparencyMode
- reducible: Lean.Meta.TransparencyMode
- instances: Lean.Meta.TransparencyMode
Instances For
Equations
Equations
Equations
- Lean.Meta.instReprTransparencyMode = { reprPrec := Lean.Meta.reprTransparencyMode✝ }
- all: Lean.Meta.EtaStructMode
Enable eta for structure and classes.
- notClasses: Lean.Meta.EtaStructMode
Enable eta only for structures that are not classes.
- none: Lean.Meta.EtaStructMode
Disable eta for structures and classes.
Instances For
Equations
- Lean.Meta.instInhabitedEtaStructMode = { default := Lean.Meta.EtaStructMode.all }
Equations
Equations
- Lean.Meta.instReprEtaStructMode = { reprPrec := Lean.Meta.reprEtaStructMode✝ }
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
- Lean.Meta.DSimp.instReprConfig = { reprPrec := Lean.Meta.DSimp.reprConfig✝ }
- maxSteps : Nat
- maxDischargeDepth : Nat
- contextual : Bool
- memoize : Bool
- singlePass : Bool
- zeta : Bool
- beta : Bool
- eta : Bool
- etaStruct : Lean.Meta.EtaStructMode
- iota : Bool
- proj : Bool
- decide : Bool
- arith : Bool
- autoUnfold : Bool
If
dsimp := true
, then switches todsimp
on dependent arguments where there is no congruence theorem that allowssimp
to visit them. Ifdsimp := false
, then argument is not visited.dsimp : Bool
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
Equations
- Lean.Meta.Simp.instReprConfig = { reprPrec := Lean.Meta.Simp.reprConfig✝ }
Equations
- One or more equations did not get rendered due to their size.
- transparency : Lean.Meta.TransparencyMode
- offsetCnstrs : Bool
Instances For
erw [rules]
is a shorthand for rw (config := { transparency := .default }) [rules]
.
This does rewriting up to unfolding of regular definitions (by comparison to regular rw
which only unfolds @[reducible]
definitions).
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
simp!
is shorthand for simp
with autoUnfold := true
.
This will rewrite with all equation lemmas, which can be used to
partially evaluate many definitions.
Equations
- One or more equations did not get rendered due to their size.
simp_arith
is shorthand for simp
with arith := true
.
This enables the use of normalization by linear arithmetic.
Equations
- One or more equations did not get rendered due to their size.
simp_arith!
is shorthand for simp_arith
with autoUnfold := true
.
This will rewrite with all equation lemmas, which can be used to
partially evaluate many definitions.
Equations
- One or more equations did not get rendered due to their size.
simp_all!
is shorthand for simp_all
with autoUnfold := true
.
This will rewrite with all equation lemmas, which can be used to
partially evaluate many definitions.
Equations
- One or more equations did not get rendered due to their size.
simp_all_arith
combines the effects of simp_all
and simp_arith
.
Equations
- One or more equations did not get rendered due to their size.
simp_all_arith!
combines the effects of simp_all
, simp_arith
and simp!
.
Equations
- One or more equations did not get rendered due to their size.
dsimp!
is shorthand for dsimp
with autoUnfold := true
.
This will rewrite with all equation lemmas, which can be used to
partially evaluate many definitions.
Equations
- One or more equations did not get rendered due to their size.