# Zulip Chat Archive

## Stream: general

### Topic: finset.prod and fin.cons

#### Yury G. Kudryashov (Jun 12 2020 at 05:10):

I'm trying to formulate a `simp`

lemma:

```
import data.fintype.card
open_locale big_operators
theorem fin.prod_univ_cons {M : Type*} [comm_monoid M] {n : ℕ} (x : M) (f : fin n → M) :
∏ i : fin (n + 1), (@fin.cons _ (λ _, M) x f i) = x * ∏ i : fin n, f i :=
sorry
```

and get the following error:

```
6:3: type mismatch at application
∏ (i : fin (n + 1)), fin.cons x f i
term
λ (i : fin (n + 1)), fin.cons x f i
has type
Π (i : fin (n + 1)), (λ (_x : fin (n + 1)), M) i : Type ?
but is expected to have type
fin (n + 1) → ?m_1 : Type ?
```

#### Yury G. Kudryashov (Jun 12 2020 at 05:11):

It seems that Lean can't unify `(λ _, β) i`

with `β`

. Is there any way to add this lemma without adding a non-dependent version of `fin.cons`

?

#### Mario Carneiro (Jun 12 2020 at 05:42):

give it the expected type

#### Mario Carneiro (Jun 12 2020 at 05:43):

```
theorem fin.prod_univ_cons {M : Type*} [comm_monoid M] {n : ℕ} (x : M) (f : fin n → M) :
(∏ i : fin (n + 1), @fin.cons _ (λ _, M) x f i : M) = x * ∏ i : fin n, f i :=
sorry
```

#### Mario Carneiro (Jun 12 2020 at 05:43):

`fin.cons`

should be `@[elab_as_eliminator]`

#### Yury G. Kudryashov (Jun 12 2020 at 05:56):

Do you mean `local attribute [elab_as_eliminator] fin.cons`

?

#### Yury G. Kudryashov (Jun 12 2020 at 05:57):

If I add `@[elab_as_eliminator]`

to the definition, the next few lemmas fail.

#### Mario Carneiro (Jun 12 2020 at 06:11):

I mean global `@[elab_as_eliminator]`

#### Mario Carneiro (Jun 12 2020 at 06:15):

Oof, yeah these are messy. I think either `cons`

should take an explicit motive argument, or it should be nondependent

#### Yury G. Kudryashov (Jun 12 2020 at 06:16):

@Sebastien Gouezel you use `fin.cons`

a lot in `multilinear`

maps. What's your experience? How often did you hit something like the issue described above?

#### Johan Commelin (Jun 12 2020 at 07:13):

Isn't that lemma already there?

#### Johan Commelin (Jun 12 2020 at 07:14):

I think I used the sum version last week

#### Johan Commelin (Jun 12 2020 at 07:16):

Nevermind, I was confusing it with src#fin.prod_univ_succ

#### Sebastien Gouezel (Jun 12 2020 at 07:33):

Yes, I encountered several times the issue that `(λ _, β) i`

and `β`

don't always unify. Since `fin.cons`

doesn't have too many implicit arguments, it wasn't too painful to provide explicitly the type to the `@`

version, though, and to add type annotations where necessary.

Last updated: Aug 03 2023 at 10:10 UTC