coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Jeremy Dawson <Jeremy.Dawson AT anu.edu.au>
- To: "coq-club AT inria.fr" <coq-club AT inria.fr>
- Subject: Re: [Coq-Club] existT
- Date: Wed, 16 Oct 2019 13:35:59 +0000
- Accept-language: en-US
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=anu.edu.au; dmarc=pass action=none header.from=anu.edu.au; dkim=pass header.d=anu.edu.au; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yW2Ue99oDQeO8DfYpPZn/FaGLnmerE07mPTEoTY/ITA=; b=hcDsMhJejvMFssggezIqNiiaOnjV1BiKF71qjYHoDfCaS5VvzZxoRoR3eYovgyNCWVnjELK8quR738JCtX94IfAriXSTHXWCiKU43CK/01Agy6pGqKC37slsP2NJGgcapo4QmyHlJLW3s2ZYu7BzeKVR1Y5gaHRIShLP5HH/XLG2XOWoPbJc1aQemJipXQosEXncdDOdVe4T3TCfM4zpMgu8hXi6ticptFfZYHPP9NLMQCGQNXVWt42vPRxsM20fY9bNmqmpwGM5tEVliSeQxOb8OXiIbEyCwIlFH/1YYXK70FbUvbI91DzuEELuX9tno/q2VGDfHXunLdrqLxRlYQ==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jrYy+CenpAw3tFNC5zhb3FGg+i7zkmV5npp8Ojb7xD7aoQqCLCOqeFpoufQJr8QJSFpxsXvTPNdyak90IvoIAB3/DjrPrU2w+/I7bVxyYNgU+0grx0VgQZBfmEJA1pfH3zuUMSzCRuy1PXTKzCi6GUoA025f6YKGD58ZFa4L51FogHqNAjYJvshjJJ8WospAG+BcgEufgJp824+zYWwSwcEc5V7mJnNmGwzqo7FjMLur8nMQPHOYjFxpPS6dUiTBLdfRP3VCu7SEwPWao1o0hwWx+uxkXlRxxx7do2tlIbx6tlL42XQ3QkBIsBcpj126Wu7fA4XrTWxhkLAF1WrDQw==
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=Jeremy.Dawson AT anu.edu.au; spf=Pass smtp.mailfrom=Jeremy.Dawson AT anu.edu.au; spf=Pass smtp.helo=postmaster AT AUS01-SY3-obe.outbound.protection.outlook.com
- Ironport-phdr: 9a23:lTZtSxbAU8DENPrrOIh5OWj/LSx+4OfEezUN459isYplN5qZrs29bnLW6fgltlLVR4KTs6sC17ON9f+9EjJeqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba58IRmsrwjctsYajIpjJ60s1hbHv3xEdvhMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTDQhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlSEKPCM7/m7KkMx9lKJVrgy8qRxjzYDaY4+VO/h/fqzBct0VSnFMXtpKWCFbHo+wc5cDAugHMO1Fr4f9vVwOrR6mCAeoGuzv0CFHhnr23KYn3eouCw/H3BcnH9IIrX/Zq9H7O7kIUe+ryanJzS/PYf1M1jbz84jIdRYhrOqWUrJ2bMrd01cgGB7YjlmKs4PlIiqY2+IQuGaV6OpgUPigi28hqwxpozivwN0siojTiY4PxFDE7yN0y5s2K92gUEN2bsKoHIFNuy2GNYZ6WN4uTm9qtSog17ELt4C3cDAFxZkj3RLTdviKfoiS7h7+WuucLi10iGx7dL6hnxqy/1avx+7gWsSx1VtHrCpIncXSuX0I1RHe6tWLRuV480evwzmP2Q7T5+RaLkwpkafWJZgsyaMqmJUJq0TMBCr2lV32jKCIckUk/fCl5vjpbbv7upOQKpZ4hBz8Pakgg8C/Bv83PRYUU2ic5OS8yKbs/UrkQLVMk/I6iLHZsIrdJcQHuKG2HxNV0ock6xa5FTum18kYnWUDLFJCfxKHjJLlNE3JIPD9Ffu/glKsnyl3x/3eMbDtHo/BImXfnLrjZ7px9kBRxQgpwdxC6Z9YFKkNIPfpVU/wsNzYAAU5Mwuxw+v/DNtyyJkeVnyKAq6ZKq/cv0WH5+w0I+mLYo8YoyzyK/445/L0k3A2hEIdcbOz0psKcHy4BOhpI12FYXrwhdcMCXsFvg0nTODzlFKCVSNTaG2pUqIn5jA7DZqmAp3ZSoCshryBxia7EYdMamBIEFDfWUvvIs+PXO5JYyaPKOdglCYFXP6vUcVpgRqprUrxz6dtBuvS4CwR85z5gotb/erWwDM/7zFxHoyx2n6WSGc8ykEFXTIzzeZTqFNmzVGr2K5lxfFUCJpa+qUaAU8BKZfAwrkiWJjJUQXbc4LREQv0cpCdGTg0C+kJ7ZoObkJ6R4rwpy34h3PvOI5O0ruBCdoz777W2GX3K4Bl0XHa2aI9jl4gBMxSKWmhga05/A/WVdeQzxep0p2yfKFZ5xbjsX+ZxDPU7kheTUh9XbiDVG1NPhKH/+S83VvLSvqVMZpiNwJAzcCYLa4TMI/gi0gASfv+ft3DMTu8
Thanks for these replies, several of them say in different ways that
(only) under certain conditions, existT is injective in its 3rd argument.
But it seems that now I've been proving it without making any such
assumption:
[jeremy@localhost sysadmin]$ coqtop -color no
Welcome to Coq 8.8.2 (January 2019)
Coq < Require Import Coq.Program.Equality. (* for dependent
induction/destruction *)
Coq < Lemma existT_inj: forall A P (x : A) px px',
existT P x px = existT P x px' -> (px = px').
Coq < 1 subgoal
============================
forall (A : Type) (P : A -> Type) (x : A) (px px' : P x),
existT P x px = existT P x px' -> px = px'
existT_inj < Proof. intros. dependent destruction H. tauto. Defined.
1 subgoal
A : Type
P : A -> Type
x : A
px, px' : P x
H : existT P x px = existT P x px'
============================
px = px'
1 subgoal
A : Type
P : A -> Type
x : A
px' : P x
============================
px' = px'
No more subgoals.
existT_inj is defined
Given the earlier replies to my question, this doesn't seem to make sense
Cheers,
Jeremy
On 2/10/19 11:12 pm, Tom de Jong wrote:
> > Actually, under some conditions existT is injective. It is the case if
> > the underlying type has decidable equality. See proof below. IIRC
> > a proof of this nowadays is also in the standard library, but I do not
> > seem to be able to find it that quickly.
> https://coq.inria.fr/library/Coq.Logic.Eqdep_dec.html
>
> Best,
>
> Tom
>
> On 02/10/2019 1:47 pm, Chris Dams wrote:
>> Hello all,
>>
>> Actually, under some conditions existT is injective. It is the case if
>> the underlying type has decidable equality. See proof below. IIRC
>> a proof of this nowadays is also in the standard library, but I do not
>> seem to be able to find it that quickly.
>>
>> Good luck,
>> Chris
>>
>> Definition sigT_get_proof:
>> forall T: Type,
>> forall eq_dec_T: forall t t': T, {t = t'} + {~ t = t'},
>> forall P: T -> Type,
>> forall t: T,
>> P t ->
>> sigT P ->
>> P t.
>> intros T eq_dec_T P t H1 H2.
>> destruct H2 as [t' H2].
>> destruct (eq_dec_T t t') as [H3|H3].
>> rewrite H3.
>> exact H2.
>> exact H1.
>> Defined.
>>
>> Theorem sigT_get_proof_existT_same:
>> forall T: Type,
>> forall eq_dec_T: forall t t': T, {t = t'} + {~ t = t'},
>> forall P: T -> Type,
>> forall t: T,
>> forall H1 H2: P t,
>> sigT_get_proof eq_dec_T t H1 (existT P t H2) = H2.
>> Proof.
>> intros T eq_dec_T P t H1 H2.
>> unfold sigT_get_proof.
>> destruct (eq_dec_T t t) as [H3|H3].
>> unfold eq_rect_r.
>> symmetry.
>> exact (eq_rect_eq_dec eq_dec_T (fun t: T => P t) H2 (sym_eq H3)).
>> tauto.
>> Qed.
>>
>> Theorem existT_injective:
>> forall T,
>> (forall t1 t2: T, { t1 = t2 } + { t1 <> t2 }) ->
>> forall P: T -> Type,
>> forall t: T,
>> forall pt1 pt2: P t,
>> existT P t pt1 = existT P t pt2 ->
>> pt1 = pt2.
>> Proof.
>> intros T T_dec P t pt1 pt2 H1.
>> pose (H2 := f_equal (sigT_get_proof T_dec t pt1) H1).
>> repeat rewrite sigT_get_proof_existT_same in H2.
>> assumption.
>> Qed.
>>
- [Coq-Club] existT, Jeremy Dawson, 10/01/2019
- Re: [Coq-Club] existT, Pierre Casteran, 10/01/2019
- Re: [Coq-Club] existT, Dominique Larchey-Wendling, 10/01/2019
- Re: [Coq-Club] existT, Jeremy Dawson, 10/02/2019
- Re: [Coq-Club] existT, Dominique Larchey-Wendling, 10/02/2019
- Re: [Coq-Club] existT, Chris Dams, 10/02/2019
- Re: [Coq-Club] existT, Tom de Jong, 10/02/2019
- Re: [Coq-Club] existT, Jeremy Dawson, 10/16/2019
- Re: [Coq-Club] existT, Sylvain Boulmé, 10/16/2019
- Re: [Coq-Club] existT, Laurent Thery, 10/16/2019
- Re: [Coq-Club] existT, Matthieu Sozeau, 10/16/2019
- Re: [Coq-Club] existT, Chris Dams, 10/16/2019
- Re: [Coq-Club] existT, Jeremy Dawson, 10/16/2019
- Re: [Coq-Club] existT, Tom de Jong, 10/02/2019
- Re: [Coq-Club] existT, Chris Dams, 10/02/2019
- Re: [Coq-Club] existT, Dominique Larchey-Wendling, 10/02/2019
- Re: [Coq-Club] existT, Jeremy Dawson, 10/02/2019
Archive powered by MHonArc 2.6.18.