Zulip Chat Archive
Stream: general
Topic: is a type with parameters injective?
Scott Buckley (May 02 2018 at 14:02):
forgive me for perhaps not using the correct terminology. what i want to know is similar to below:
lemma type_something_injectivity: ∀ {T1 T2:Type} {l1:list T1} {l2:list T2}, l1 == l2 -> T1 = T2 := begin ??? end
Is the above provable?
More specifically, I have some inductive type vexp: forall (T:Type 0), T -> Type 1
, and I want to know that vexp T1 v1 == vexp T2 v2 -> T1 = T2 and v1 == v2
does this make sense?
Mario Carneiro (May 02 2018 at 15:28):
Yes it makes sense to ask this question, and the answer is that it is usually independent in lean and sometimes provably false
Mario Carneiro (May 02 2018 at 15:30):
import logic.function inductive noninj (T : set Type) : Type | mk : noninj example : ¬ (∀ x y, noninj x = noninj y → x = y) := function.cantor_injective _
Scott Buckley (May 03 2018 at 01:38):
I thought that may be the case, however I couldn't understand why, but your example makes it clear. Thanks very much! :)
Last updated: Dec 20 2023 at 11:08 UTC