Zulip Chat Archive

Stream: new members

Topic: two finsets of all of fin n are the same


Evan Lohn (Dec 24 2021 at 13:57):

I wasn't sure how to prove the following:

import data.finset.basic

def rowindset : finset (fin 4) := list.to_finset [fin.of_nat 0, fin.of_nat 1, fin.of_nat 2, fin.of_nat 3]
example {r0 r1 r2 r3 : fin 4}
  (h1 : r0  r1)
  (h2 : r0  r2  r1  r2)
  (h3 : r0  r3  r1  r3  r2  r3) :
  rowindset = [r0, r1, r2, r3].to_finset :=
begin
  sorry,
end

essentially "four different elements of fin 4 are the same as the explicitly constructed set of the elements of fin 4". I'd be grateful if someone could point me to relevant lemmas and/or weirdness in my definition!

Anne Baanen (Dec 24 2021 at 14:01):

Since there are finitely many options and we can compute with fin, you can ask Lean to check all possibilities:

example :  {r0 r1 r2 r3 : fin 4}
  (h1 : r0  r1)
  (h2 : r0  r2  r1  r2)
  (h3 : r0  r3  r1  r3  r2  r3),
  rowindset = [r0, r1, r2, r3].to_finset :=
by dec_trivial

Anne Baanen (Dec 24 2021 at 14:03):

Of course that doesn't scale to lots of fins :)

Evan Lohn (Dec 24 2021 at 14:05):

Thanks! Not sure if it's my version of Lean or mathlib that's causing this problem, but I had to use the exclam version dec_trivial! for some reason.

Johan Commelin (Dec 24 2021 at 14:07):

Note that Anne put all the assumptions in the goal (that is, right of the :)

Johan Commelin (Dec 24 2021 at 14:07):

dec_trivial! tries to do that for you.

Anne Baanen (Dec 24 2021 at 14:17):

I didn't even realize that dec_trivial! existed :grinning:

Kevin Buzzard (Dec 24 2021 at 15:22):

Whenever a tactic I try doesn't work, I always append an exclamation mark and try again ;-)


Last updated: Dec 20 2023 at 11:08 UTC