The generalized rewriting tactic #
This module defines the core of the grw/grewrite tactic.
TODO:
The algorithm used to implement grw uses the same method as rw to determine where to rewrite.
This means that we can get ill-typed results. Moreover, it doesn't detect which occurrences
can be rewritten by gcongr and which can't. It also means we cannot rewrite bound variables.
A better algorithm would be similar to simp only, where we recursively enter the subexpression
using gcongr lemmas. This is tricky due to the many different gcongr for each pattern.
With the current implementation, we can instead use nth_grw.
Given a proof of a ~ b, close a goal of the form a ~' b or b ~' a
for some possibly different relation ~'.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The result returned by Lean.MVarId.grewrite.
- eNew : Lean.Expr
The rewritten expression
- impProof : Lean.Expr
The proof of the implication. The direction depends on the argument
forwardImp. - mvarIds : List Lean.MVarId
The new side goals
Instances For
Configures the behavior of the rewrite and rw tactics.
- useRewrite : Bool
When
useRewrite = true, switch to using the defaultrewritetactic when the goal is and equality or iff. - implicationHyp : Bool
When
implicationHyp = true, interpret the rewrite rule as an implication.
Instances For
Rewrite e using the relation hrel : x ~ y, and construct an implication proof
using the gcongr tactic to discharge this goal.
if forwardImp = true, we prove that e → eNew; otherwise eNew → e.
If symm = false, we rewrite e to eNew := e[x/y]; otherwise eNew := e[y/x].
The code aligns with Lean.MVarId.rewrite as much as possible.
Equations
- One or more equations did not get rendered due to their size.