- useDecide : Bool
- emptyType : Bool
Check whether any of the hypotheses is an empty type.
- searchFuel : Nat
When checking for empty types,
searchFuel
specifies the number of goals visited. - genDiseq : Bool
Instances For
@[reducible, inline]
Instances For
Equations
- Lean.Meta.ElimEmptyInductive.instMonadBacktrackSavedStateM = { saveState := liftM Lean.Meta.saveState, restoreState := fun (s : Lean.Meta.SavedState) => liftM s.restore }
def
Lean.MVarId.contradictionCore
(mvarId : Lean.MVarId)
(config : Lean.Meta.Contradiction.Config)
:
Return true
if goal mvarId
has contradictory hypotheses.
See MVarId.contradiction
for the list of tests performed by this method.
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lean.MVarId.contradiction
(mvarId : Lean.MVarId)
(config : Lean.Meta.Contradiction.Config :=
{ useDecide := true, emptyType := true, searchFuel := 16, genDiseq := false })
:
Try to close the goal using "contradictions" such as
- Contradictory hypotheses
h₁ : p
andh₂ : ¬ p
. - Contradictory disequality
h : x ≠ x
. - Contradictory equality between different constructors, e.g.,
h : List.nil = List.cons x xs
. - Empty inductive types, e.g.,
x : Fin 0
. - Decidable propositions that evaluate to false, i.e., a hypothesis
h : p
s.t.decide p
reduces tofalse
. This is only tried ifConfig.useDecide = true
.
Throw exception if goal failed to be closed.
Equations
- mvarId.contradiction config = do let __do_lift ← mvarId.contradictionCore config if __do_lift = true then pure PUnit.unit else Lean.Meta.throwTacticEx `contradiction mvarId