Zulip Chat Archive
Stream: new members
Topic: why `tauto` can't prove this?
Asei Inoue (Mar 05 2024 at 02:26):
import Mathlib.Tactic
example (α : Type) (S : α → Prop) : ¬(∀ x, S x) → (∃ x, ¬ S x) := by
-- `tauto` can't show this
try tauto
aesop
Mark Fischer (Mar 05 2024 at 18:19):
I think the issue is that tauto doesn't decompose functions and ∀ x, S x
is a function. So it get's stuck there.
Here you can maybe see a bit more clearly:
example (α : Type) (S : α → Prop) : ¬((x : α) → S x) → (∃ x, ¬ S x) :=
Classical.not_forall.mp
I'm not 100% sure though. If you look at the unsolved goals for tauto
, it needs to synthesize a value to give S
in order to derive False
. Classical.not_forall
creates implicit decidable instances and then calls Decidable.not_forall
. I don't think tauto
is designed to try anything like this.
Last updated: May 02 2025 at 03:31 UTC