Documentation

Mathlib.Tactic.Conv

Additional conv tactics.

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.
  • discharge => tac is a conv tactic which rewrites target p to True if tac is a tactic which proves the goal ⊢ p⊢ p.
  • discharge without argument returns ⊢ p⊢ p as a subgoal.
Equations
  • One or more equations did not get rendered due to their size.

Elaborator for the discharge tactic.

Equations
  • One or more equations did not get rendered due to their size.

The command #conv tac => e will run a conv tactic tac on e, and display the resulting expression (discarding the proof). For example, #conv rw [true_and] => True ∧ False∧ False displays False. There are also shorthand commands for several common conv tactics:

  • #whnf e is short for #conv whnf => e
  • #simp e is short for #conv simp => e
  • #norm_num e is short for #conv norm_num => e
  • #push_neg e is short for #conv push_neg => e
Equations
  • One or more equations did not get rendered due to their size.

with_reducible tacs excutes tacs using the reducible transparency setting. In this setting only definitions tagged as [reducible] are unfolded.

Equations
  • One or more equations did not get rendered due to their size.

The command #whnf e evaluates e to Weak Head Normal Form, which means that the "head" of the expression is reduced to a primitive - a lambda or forall, or an axiom or inductive type. It is similar to #reduce e, but it does not reduce the expression completely, only until the first constructor is exposed. For example:

open Nat List
set_option pp.notation false
#whnf [1, 2, 3].map succ
-- cons (succ 1) (map succ (cons 2 (cons 3 nil)))
#reduce [1, 2, 3].map succ
-- cons 2 (cons 3 (cons 4 nil))

The head of this expression is the List.cons constructor, so we can see from this much that the list is not empty, but the subterms Nat.succ 1 and List.map Nat.succ (List.cons 2 (List.cons 3 List.nil)) are still unevaluated. #reduce is equivalent to using #whnf on every subexpression.

Equations
  • One or more equations did not get rendered due to their size.

The command #whnfR e evaluates e to Weak Head Normal Form with Reducible transparency, that is, it uses whnf but only unfolding reducible definitions.

Equations
  • One or more equations did not get rendered due to their size.
  • #simp => e runs simp on the expression e and displays the resulting expression after simplification.
  • #simp only [lems] => e runs simp only [lems] on e.
  • The => is optional, so #simp e and #simp only [lems] e have the same behavior. It is mostly useful for disambiguating the expression e from the lemmas.
Equations
  • One or more equations did not get rendered due to their size.