Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Dependent typing puzzle, constructor injectivity

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Dependent typing puzzle, constructor injectivity


Chronological Thread 
  • From: Jeremy Dawson <Jeremy.Dawson AT anu.edu.au>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Dependent typing puzzle, constructor injectivity
  • Date: Sun, 14 Feb 2021 11:37:56 +1100
  • 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=LzeCFvK9XWdxFiHDO42NzINLbw8qw0tX5v20AFDTETk=; b=IM70V013p9uK20/BQQSdyx4uXIdBnu6m+3mHrMNYq87tajB1jM9iEQr6JH9lovhE+L0c6XBEn8ZTtPXan6VdVrjyo8IHTgRGhIXZu0jA8juO6qPtCtw9v139pwl609Zws3n9KGedM8lucibf68No3XcRYtXXVjFJmK5DAP4QTO97TIFgQ5Dg/AjHXuAqlXKCfpd4GTNJpGHJ5SyIjDjhAU6Z7xk2lSl3FPUFmhjaOgUn1EStR1NsbwRfudH0eYVDhl/hnliBTr5DEtArGdliljwtziAqch4BoqogpZOD0xzTz8rmhpCew8zFytvE081smbC+95bxACDA/MUcC5M5/g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BvcIVNvOdbiw5AdaQC2uOntOKeu7scLzCJJgbj3ZwWs5ho+YAC58imXMyvrdSUIFUf+EhVW16wtMUOevMLaNtPixIxkYfC2n7TNL4fFIKYgR0rsP3r5TcKHDDJ+AFsINaa8KNcwH0jKxfQL4VrAJPTii1saW/6knSWfefGLCIm8U2iitLYNpkl8V/36SVU04VtXHg1KV/FgBhry20vp9ggsMRkKd+/aTlFqCVejeUsBqz4Z1dmIdfObzFu2sUN3u0Z177ebyD4RrcysWJMVLZg/lY+VwFK3QDhfkT56NsJsMGDKL/FwuwzTSMRFOfE6e3T4Cekq6uYuD/dro4DRm4Q==
  • Authentication-results: mail3-smtp-sop.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-ME3-obe.outbound.protection.outlook.com
  • Ironport-phdr: 9a23:sGwkYh8DE/mc0f9uRHKM819IXTAuvvDOBiVQ1KB32u0cTK2v8tzYMVDF4r011RmVBNSdta4P07GempujcFRI2YyGvnEGfc4EfD4+ouJSoTYdBtWYA1bwNv/gYn9yNs1DUFh44yPzahANS47xaFLIv3K98yMZFAnhOgppPOT1HZPZg9iq2+yo9JDffgFFiCC8bL59Ixm6sQvcvdQKjIV/Lao81gHHqWZSdeRMwmNoK1OTnxLi6cq14ZVu7Sdete8/+sBZSan1cLg2QrJeDDQ9LmA6/9brugXZTQuO/XQTTGMbmQdVDgff7RH6WpDxsjbmtud4xSKXM9H6QawyVD+/6apgVR3mhzodNzMh7W/ZlMJwgqJYrhyvqRNwwZLbbo6UNPVxZa7dYdAXSHBdUspNWSFMAIWxZJYPAeobOuZYqpHwqV8QohukGwasAePuwSJGiHDs06w6yOMhEQfb1wEnG9wBrm7Uo8vwNKYSS+y7wrPHzDvYb/NR3zfw85LHchY8of2WQ71/bNfRxVM1GAPYl1idr5HuMDyJ2OoXqWeb8/ZgWvy1i24hswx/rCSjytsjhITVhY8Y1kzJ+yVkzIorO9G0VlN3bMOqHpZOty+XNJV7Tt4tTm9ntys3xbILtJ+lcCUFypkpyR7SZvqaeIaL+hLuTOmcLStiiH54ZL6yhQy+/VW8xuD/TMW4zUtGoyhdntTDsn0BzQHf58yHR/dn40us1iuD2xrO5uxGI005k7fQJYQ7zb4qjJUTtFzOHi/ol0Xyi6+bblkp9ea15ej7f7nqv5iSOYB6hw3nNaQhgdKwDf4/MggTQ2iU4uO81KDl/ULkWrlKluc2kq7FsJ/EOcsbuq+5AwhT0oo57Ba/Eium0NAfnXkAL1JJYg6Ij4/sO13WIfD4C+mwg0i0nTpk2/zKJKDtDonPI3TZjbvtYbVw51RBxAYuz91T/5dUBasAIPL3VE/xrtvYDhohPgKw3ennEsty1oYeWG6VDKGWKq3TsUSP5uIpOOSDfokVuCvnJ/c7+vHukGU1lkUAfaWxx5sYdGi4Huh6I0WeeXfjntABEX4TsgUiSOzqlUaNXCVIZ3eyWqI8/is0BJinDYfFXICtgaaO0D21Hp1MNSh6DQWHFm6tfIGZUd8NbjiTK4lviG8qT7+kHq0szxyrpUfWwqV8Keycrg8Vr5/mxZ5Z7vLIkhca/DppScmRzieEUjcnzSszWzYq0fUn8gRGwVCZ3P0g2qAKJZlo//pMFzwCG9vE1eUjUYL7XB+Hc9uUDl+7EI3/UGMBC+kpytpLWH5TXtCrjxTNxS2vWuVHnrqWQpE47+TVwiqofpsv+zP9zKAkymIebI5POGmh2vEt3jXoX9eMtmjC0qGgeOIbwTLH83qFwSyWpkZEXQVsUKLDG3cCek/Rqte/7UTHHeaj



On 13/2/21 10:35 pm, Gert Smolka wrote:
I would like to prove

Inductive K (x: nat) : nat -> Type :=
| K1: K x (S x)
| K2: forall y z, K x y -> K y z -> K x z.

Fact K2_injective x y z a b a' b':
K2 x y z a b = K2 x y z a' b' -> (a,b) = (a',b').

by hand in a way that is similar to the proof generated
by the dependent elimination tactic of the Equations package.
Does someone have a hand proof bringing across the essential ideas?

Thanks in advance,
Gert

PS. I have a simple proof exploiting the "semantic” fact (K x y -> x < y),
but so far I failed in finding a "regular” proof using only routine
techniques.


Hi Gert,

I don't understand the logic behind all of this, but it can be proved thus:

Fact K2_injective x y z a b a' b':
K2 x y z a b = K2 x y z a' b' -> (a,b) = (a',b').

Require Import Coq.Program.Equality.

intro.
dependent destruction H.
reflexivity.
Qed.

Coq < Print Assumptions K2_injective.
Fetching opaque proofs from disk for Coq.Logic.EqdepFacts
Axioms:
Eqdep.Eq_rect_eq.eq_rect_eq : forall (U : Type) (p : U)
(Q : U -> Type) (x : Q p)
(h : p = p), x = eq_rect p Q x p h
JMeq_eq : forall (A : Type) (x y : A), x ~= y -> x = y

alternatively you can get part way there
(and in the past when I've had the same sort of situation
before I've been able to complete a proof this way)

intro.
inversion H.
inversion_sigma.
rewrite <- Eqdep.EqdepTheory.eq_rect_eq in H5.
(* I don't understand why the following line
doesn't work in this case *)
rewrite <- Eqdep.EqdepTheory.eq_rect_eq in H4.

Cheers,

Jeremy



Archive powered by MHonArc 2.6.19+.

Top of Page