I have no idea how to prove the following lemma. Can anyone help me with it? I wouldn't mind using classical logic. Thanks!

```
Lemma foo {I : Type} {J : I -> Type} (ix: I) (jx: J ix):
exists f : forall i : I, J i, f ix = jx.
Proof.
Admitted.
```

you can't, it's absurd

```
Lemma bad : (forall {I : Type} {J : I -> Type} (ix: I) (jx: J ix),
exists f : forall i : I, J i, f ix = jx)
-> False.
Proof.
intros F.
destruct (F bool (fun b => if b then True else False) true I) as [f _].
exact (f false).
Qed.
```

If you take `I`

to be `bool`

and `J true = True`

and `J false = False`

and `ix = true`

then `jx`

is just a proof of `True`

but you also need to provide a proof of `False`

because `f false : False`

?

I see. Thank you both!

Yu Zhang has marked this topic as resolved.

Last updated: Oct 01 2023 at 19:01 UTC