11# Tactics
22
3- Mathlib version: ` a7f816c359320b9c0383f3c052d5a0574db65b97 `
3+ Mathlib version: ` 89ec9c848cb1c5922fa50b91eb5156a46bd71e85 `
44
55## \# adaptation_note
66Defined in: ` «tactic#adaptation_note_» `
@@ -1047,10 +1047,10 @@ Defined in: `«tacticBy_cases_:_»`
10471047` by_cases (h :)? p ` splits the main goal into two cases, assuming ` h : p ` in the first branch, and ` h : ¬ p ` in the second branch.
10481048
10491049## by_cases!
1050- Defined in: ` byCases! `
1050+ Defined in: ` Mathlib.Tactic.ByCases. byCases!`
10511051
10521052` by_cases! h : p ` runs the ` by_cases h : p ` tactic, followed by
1053- ` try push_neg at h` in the second subgoal. For example,
1053+ ` push_neg at h ` in the second subgoal. For example,
10541054- ` by_cases! h : a < b ` creates one goal with hypothesis ` h : a < b ` and
10551055 another with ` h : b ≤ a ` .
10561056- ` by_cases! h : a ≠ b ` creates one goal with hypothesis ` h : a ≠ b ` and
@@ -1066,7 +1066,7 @@ introducing a hypothesis `h : ¬p` and proving `False`.
10661066* If ` h ` is omitted, the introduced variable will be called ` this ` .
10671067
10681068## by_contra!
1069- Defined in: ` byContra! `
1069+ Defined in: ` Mathlib.Tactic.ByContra. byContra!`
10701070
10711071If the target of the main goal is a proposition ` p ` ,
10721072` by_contra! ` reduces the goal to proving ` False ` using the additional hypothesis ` this : ¬ p ` .
@@ -6022,7 +6022,7 @@ which can also cope with identities of the form
60226022where ` a = a' ` , ` b = b' ` , and ` c = c' ` can be proved using ` pure_coherence `
60236023
60246024## push
6025- Defined in: ` Mathlib.Tactic.Push.push `
6025+ Defined in: ` Mathlib.Tactic.Push.pushStx `
60266026
60276027` push ` pushes the given constant away from the head of the expression. For example
60286028- ` push _ ∈ _ ` rewrites ` x ∈ {y} ∪ zᶜ ` into ` x = y ∨ ¬ x ∈ z ` .
@@ -6085,8 +6085,7 @@ For instance, a hypothesis `h : ¬ ∀ x, ∃ y, x ≤ y` will be transformed by
60856085` push_neg ` is a special case of the more general ` push ` tactic, namely ` push Not ` .
60866086The ` push ` tactic can be extended using the ` @[push] ` attribute. ` push ` has special-casing
60876087built in for ` push Not ` , so that it can preserve binder names, and so that ` ¬ (p ∧ q) ` can be
6088- transformed to either ` p → ¬ q ` (the default) or ` ¬ p ∨ ¬ q ` . To get ` ¬ p ∨ ¬ q ` , use
6089- ` set_option push_neg.use_distrib true ` .
6088+ transformed to either ` p → ¬ q ` (default) or ` ¬ p ∨ ¬ q ` (` push_neg +distrib ` ).
60906089
60916090Tactics that introduce a negation usually have a version that automatically calls ` push_neg ` on
60926091that negation. These include ` by_cases! ` , ` contrapose! ` and ` by_contra! ` .
0 commit comments