Zulip Chat Archive

Stream: Is there code for X?

Topic: inequalities for fintype.card


Scott Morrison (May 22 2020 at 14:37):

I need something along the lines of

lemma card_lt_card_of_injective_of_not_mem
  {α β : Type*} [fintype α] [fintype β] (f : α  β) (h : function.injective f)
  (b : β) (w : b  set.range f) : fintype.card α < fintype.card β :=

Any advice on how to get this from library material?

Scott Morrison (May 22 2020 at 14:40):

My plan would be to prove fintype.card α ≤ fintype.card β from function.injective f, then case split and in the case fintype.card α = fintype.card β show that f is an equivaelence, and obtain a contradiction from w. That all seems doable, but .... I wish it were easier!

Bhavik Mehta (May 22 2020 at 14:49):

import data.fintype.basic

open finset

lemma card_lt_card_of_injective_of_not_mem
  {α β : Type*} [fintype α] [fintype β] (f : α  β) (h : function.injective f)
  (b : β) (w : b  set.range f) : fintype.card α < fintype.card β :=
begin
  classical,
  rw [ card_univ,  card_image_of_injective univ h,  card_univ],
  apply card_lt_card,
  rw ssubset_iff,
  refine b, _, subset_univ _⟩,
  sorry,
end

Bhavik Mehta (May 22 2020 at 14:49):

Here's an approach with one sorry which might be a bit easier

Scott Morrison (May 22 2020 at 14:51):

Awesome! Thanks very much for that.

Scott Morrison (May 22 2020 at 14:51):

(the sorry is no problem)

Reid Barton (May 22 2020 at 14:51):

Maybe something like

import data.fintype.card

open finset
open_locale classical

lemma card_lt_card_of_injective_of_not_mem
  {α β : Type*} [fintype α] [fintype β] (f : α  β) (h : function.injective f)
  (b : β) (w : b  set.range f) : fintype.card α < fintype.card β :=
calc
  fintype.card α = (univ : finset α).card : _
... = (image f univ).card : (card_image_of_injective univ h).symm
... < (insert b (image f univ)).card : card_lt_card (ssubset_insert _)
...  (univ : finset β).card : _
... = fintype.card β : _

Reid Barton (May 22 2020 at 14:52):

I see we used basically the same things

Scott Morrison (May 22 2020 at 14:52):

I like the calc block.

Scott Morrison (May 22 2020 at 14:57):

import data.fintype.card

open finset
open_locale classical

lemma card_lt_card_of_injective_of_not_mem
  {α β : Type*} [fintype α] [fintype β] (f : α  β) (h : function.injective f)
  (b : β) (w : b  image f univ) : fintype.card α < fintype.card β :=
calc
  fintype.card α = (univ : finset α).card : rfl
... = (image f univ).card : (card_image_of_injective univ h).symm
... < (insert b (image f univ)).card : card_lt_card (ssubset_insert w)
...  (univ : finset β).card : card_le_of_subset (subset_univ _)
... = fintype.card β : rfl

completes the gaps in Reid's version. (And cheats by changing the type of w.)


Last updated: Dec 20 2023 at 11:08 UTC