Zulip Chat Archive

Stream: lean4

Topic: contradiction on bools


James Gallicchio (Aug 28 2022 at 23:42):

I expected contradiction to be able to close this goal -- is this something it should handle?

example (b : Bool) (h₁ : b = true) (h₂ : b = false) : False
  := by contradiction

Or more generally, any time when there are two hypotheses that have the same expression equal to different constructors

Kyle Miller (Aug 29 2022 at 01:55):

I'm not sure what contradiction should or shouldn't do, but you can add in subst_vars to help contradiction out:

example (b : Bool) (h₁ : b = true) (h₂ : b = false) : False
  := by subst_vars; contradiction

James Gallicchio (Aug 30 2022 at 02:40):

ooooooh, never seen that tactic before, thanks!

James Gallicchio (Aug 30 2022 at 06:27):

I now realize this doesn't quite work for my use case, which is more like

example (f : α  Bool) (a : α) (h₁ : f a = true) (h₂ : f a = false) : False
  := by sorry

but I think it's probably easiest to just wait for cc to be implemented

Kevin Buzzard (Aug 30 2022 at 06:39):

You can just rewrite and then use cases

Marcus Rossel (Aug 30 2022 at 06:45):

James Gallicchio said:

I now realize this doesn't quite work for my use case, which is more like

example (f : α  Bool) (a : α) (h₁ : f a = true) (h₂ : f a = false) : False
  := by sorry

but I think it's probably easiest to just wait for cc to be implemented

example (f : α  Bool) (a : α) (h₁ : f a = true) (h₂ : f a = false) : False := by
  have := h₁.symm.trans h₂ -- establishes `true = false`
  contradiction

Mario Carneiro (Aug 30 2022 at 07:13):

or cases h₁ ▸ h₂

James Gallicchio (Aug 30 2022 at 14:41):

For a single case doing it manually is perfectly fine, but I have a proof where there are a handful of cases that would almost all be solved by cc. So right now I manually go through the cases and name the hypotheses and construct the proof terms, but doing <;> (fst | cc | simp; assumption) instead would be really nice

James Gallicchio (Aug 30 2022 at 14:42):

Actually, is somebody working on reimplementing cc yet? I've been looking for metaprogramming projects to try out

Leonardo de Moura (Aug 30 2022 at 14:50):

James Gallicchio said:

Actually, is somebody working on reimplementing cc yet? I've been looking for metaprogramming projects to try out

Nobody is currently working on cc, and would be great to have someone helping with it.

James Gallicchio (Aug 30 2022 at 14:54):

Ok, I'll give it a shot! :smile: Should it live in core or mathlib?

Leonardo de Moura (Aug 30 2022 at 14:57):

It should be in the lean4 repo.


Last updated: Dec 20 2023 at 11:08 UTC