coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Maximilian Wuttke <mwuttke97 AT posteo.de>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Type casting of a dependent type
- Date: Mon, 28 Sep 2020 14:04:33 +0200
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mwuttke97 AT posteo.de; spf=Pass smtp.mailfrom=mwuttke97 AT posteo.de; spf=None smtp.helo=postmaster AT mout02.posteo.de
- Ironport-phdr: 9a23:PuxBWBzlcQvmyYDXCy+O+j09IxM/srCxBDY+r6Qd2+sQIJqq85mqBkHD//Il1AaPAdyEragawLGI+4nbGkU4qa6bt34DdJEeHzQksu4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1Ov71GonPhMiryuy+4ZLebxhKiTanf79/LRq6oAvQu8ILnYZsN6E9xwfTrHBVYepW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbfVwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8qFmQwLqhigaLT406HzZhNJ+jKxboxyvqRJwzIHWb46JO/RzZb/dcNAASGZdQspcWS5MD4WhZIUPFeoBOuNYopH6qVQUohq+BAysBOLryj9JnHD227Ax3OQ8EQHawAwgHMwBu2nTodXwOqYSTPy1zLXLzTrda/5b2yzw6JDPchA6vfGDQ7VwfdDMxkYxDg7IiEibpoP5MT2PzOsNr3Sb4PR6VeKpk2MppR19rDavyMovjoTHiYwbxk7K+yhnz4g4Jd+1RFBlbNOqDJZdsyKXOoV5TM8+X2xkpig3x7IHtJC1fCYExokqyhjCYPKEa4iF+g/vWeWRLDtihX9oeqizihiz/ES6y+DxV9G43VVOoyZfj9XBuXEA2wbN5sSZVvdx5Fqt1DiT2w3V9+pKO1o7lbDBJJ4k2rMwloQcsUDEHiLunUX2i7KWdlk49uS28ejnerLmpoSAN4BqjQHyKLkhldKnDeQ5NAgBQXSb9Pyh2LDg/UD1WrRHg/8snqTXsZ3WP8UWq6+hDw9QyIkj6hK/Dzm80NQfmHkKNFdFeRyaj4j1J1HOI+73APO9jlm3iDdrwOvGPqH/DZXKNHTMjanuca5n60FA0Aoz0cxf55VMB74dJ/LzQ1b9u8DcDh8kKAO52P3nCdV41oMGQ22DGK6ZMKXIsV+J/O0jOeeMZJVG8Ar6fvMi/rvliWIzsV4bZ6igm5UNO16iGfEzBkyJYH/thtYIFy81oxYiT+Gi3FidTCJPZHvjAIok4SonBYXgAYqVFdPlu6CIwCruRs4eXWtBEF3ZSS61JbXBYO8FbWepGuEkkjEAUuHxGYomyA327knizKF7I+2S9iBK7cuyhugw3PXakFQJzRIxCs2c12+XSGQtxzEQQCQq0ac5rUEvkw7fg5g9uORREJlo390MSh0zbMeO1+thF931HA7MLI+E
You can indeed 'cast' a value from type `T (f a)` to type `T (g a)` if
you can prove `f a = g a`. To do that, you use the eliminator on `eq`:
```
eq_rect
: forall (A : Type) (x : A) (P : A -> Type), P x ->
forall y : A, x = y -> P y
```
MWE:
```
Parameter A : Type.
Parameter f g : A -> A.
Parameter T : A -> Type.
Parameter omega : forall a : A, T (f a).
Parameter f_a_eq_g_a : forall (a : A), f a = g a.
Definition cast : forall a : A, T (g a).
Proof.
intros a.
elim (f_a_eq_g_a a).
apply omega.
*)
Defined.
Print cast.
(*
cast =
fun a : A => eq_rect (f a) (fun a0 : A => T a0) (omega a) (g a)
(f_a_eq_g_a a)
: forall a : A, T (g a)
*)
```
On 28/09/2020 08:40, 劉弘毅 wrote:
> Hi,
> I defined a function about (A: Type), (f: A -> A), and (T: A -> Type)
> as follows.
>
> Definition omega (a: A): T (f a) := (* Expression *).
>
> I also took (g: A -> A) and proved the following lemma.
>
> Lemma f_a_eq_g_a : forall (a: A), f a = g a.
>
> Now, I want to treat (omega a) as a value in (T (g a)). Is there any
> easy way to do this?
> Regards,
> Koki
- [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, Maximilian Wuttke, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, Adam Chlipala, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, Maximilian Wuttke, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, Adam Chlipala, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, 劉弘毅, 09/28/2020
- Re: [Coq-Club] Type casting of a dependent type, Maximilian Wuttke, 09/28/2020
Archive powered by MHonArc 2.6.19+.