- all : tactic.transparency
- semireducible : tactic.transparency
- instances : tactic.transparency
- reducible : tactic.transparency
- none : tactic.transparency
A parameter representing how aggressively definitions should be unfolded when trying to decide if two terms match, unify or are definitionally equal. By default, theorem declarations are never unfolded.
all
will unfold everything, including macros and theorems. Except projection macros.semireducible
will unfold everything except theorems and definitions tagged as irreducible.instances
will unfold all class instance definitions and definitions tagged with reducible.reducible
will only unfold definitions tagged with thereducible
attribute.none
will never unfold anything. [NOTE] You are not allowed to tag a definition with more than one ofreducible
,irreducible
,semireducible
attributes. [NOTE] there is a config flagm_unfold_lemmas
that will make it unfold theorems.
- non_dep_first : tactic.new_goals
- non_dep_only : tactic.new_goals
- all : tactic.new_goals
How to order the new goals made from an apply
tactic.
Supposing we were applying e : ∀ (a:α) (p : P(a)), Q
non_dep_first
would produce goals⊢ P(?m)
,⊢ α
. It puts the P goal at the front because none of the arguments afterp
ine
depend onp
. It doesn't matter what the resultQ
depends on.non_dep_only
would produce goal⊢ P(?m)
.all
would produce goals⊢ α
,⊢ P(?m)
.
- md : tactic.transparency
- approx : bool
- new_goals : tactic.new_goals
- instances : bool
- auto_param : bool
- opt_param : bool
- unify : bool
Configuration options for the apply
tactic.
md
sets how aggressively definitions are unfolded.new_goals
is the strategy for ordering new goals.instances
iftt
, thenapply
tries to synthesize unresolved[...]
arguments using type class resolution.auto_param
iftt
, thenapply
tries to synthesize unresolved(h : p . tac_id)
arguments using tactictac_id
.opt_param
iftt
, thenapply
tries to synthesize unresolved(a : t := v)
arguments by setting them tov
.unify
iftt
, thenapply
is free to assign existing metavariables in the goal when solving unification constraints. For example, in the goal|- ?x < succ 0
, the tacticapply succ_lt_succ
succeeds with the default configuration, butapply_with succ_lt_succ {unify := ff}
doesn't since it would require Lean to assign?x
tosucc ?y
where?y
is a fresh metavariable.
A tag
is a list of names
. These are attached to goals to help tactics track them.
Equations
By default, Lean only considers local instances in the header of declarations. This has two main benefits. 1- Results produced by the type class resolution procedure can be easily cached. 2- The set of local instances does not have to be recomputed.
This approach has the following disadvantages: 1- Frozen local instances cannot be reverted. 2- Local instances defined inside of a declaration are not considered during type class resolution.