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