Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Proving transitiviy of simple type system

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Proving transitiviy of simple type system


Chronological Thread 
  • From: Lasse Blaauwbroek <lasse AT blaauwbroek.eu>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Proving transitiviy of simple type system
  • Date: Mon, 2 Oct 2023 21:06:13 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=lasse AT blaauwbroek.eu; spf=Pass smtp.mailfrom=lasse AT blaauwbroek.eu; spf=None smtp.helo=postmaster AT mail.blaauwbroek.eu
  • Ironport-data: A9a23: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 T7+
  • Ironport-hdrordr: A9a23:6AkT1qxkY/eEYTyjJ8h7KrPwO71zdoMgy1knxilNoG9uEvBw9v rFoB1173PJYVoqKRQdcJW7Sc29qBDnmqKdg7N9AV7KZmCP01dAbrsSj7cKqAeAJ8SRzJ8/6U 4tScZDNOE=
  • Ironport-phdr: A9a23:EmT1Shd751FrVoqfBWYiOjq8lGM+ydjLVj580XJGo7dHc6D5uo/nI FSa//JmylnAQYTc7ftAzevQqaHpH2Iast6aqH5XVptKWlcejNkO2RQ6CZuBAFbgIdbgayUzA dtITlho/De2LBsdA97wMmXbuWb69jsOAlP6PAtxKP7yH9vWht+s2si4/5TafhpCnj2wYvV/M Ub+th3f4+8Rh4YqMaMt0l3Jr39PLvxR3n9tLEmPkgzU486x+Nhp9y1Zpu0r7clNUuP3YszUV JR+CzIreyAw7czv71zYSBeXo2EbWSMQmwZJBA7M6Ff7WI3wu230rLg13i7SJsDwQb0uPFbqp 652VB/ljjsGPD8l4SnWjMJ3lqdSvBOmoVR23YfVZIifMPc2cLnaeJsWQm9IX8AZUCIkYMv0a 4IUFOcpN+JRppTirUEJoBj4CBTtTOLjxzlUh2PniLUg2rdpGgXH0Qo8WtMW5S2E8ZOvaOFIC 7jzk/CbqFeLJ+lb0jr89oXSJxUooPXWGKl1bdKU004kUQXMklSXr4XheTKTzOUE9WaBvI8CH aqijXAqrwZpr32h3MAp38PNj5kOx3jO8Sxw3Zk/P9q1Swh2fJT3dfkY/zHfLIZwTs44Fitss T0hx5UMvZeyYTcA0pMqxFjSdrbUFurAqgKmX+GXLzBigXtjc7/qnBe+/3+rzejkX9W12lJHx sZcuuHFrWtFlxna68zdD+B44l/kwzGEkQba9uBDJ0kw06vdMZ8ohLAqxNIftkHKHym+n0uT7 ufeckw/4eWA4eDua6j5rIWbOowyhxy2Pqk1m8O5CPg1KUBXDzXdo7j6jue7uxKgCLxRxuU7i KzYrIzXKaF57uaiDglZ35xioxezAjG60cgJyHwOLVZLYhWC3MDiP1DDJuy9DO/q2gTx1m03g aqcZvu+W8aoTDCLirrqcLdj5lQJzQMyyYoa/JdIEvQbJ/m1XEbttdveBxt/Mgquwu+hBs8us +FWEW+JHKKdN7vf9FGS4ed6ae2Ff5QYkDz5IvE4+PT0inI631IAN/rMv9NfeDWjE/JqLl/MK 37lmcwMOW0OtwMjU+bwj1CBFzNOLSXXPep09nQwD4SoCp3GT4amjema3Su1KZZRY3hPFlGGF Xq7P5XBQfoHbzieZ9NwijFRH6b0UJcvjFv90W2yg6oiNOff/TcU8I7uxMQgrfOGjgk8rHRxH 4yUm3eES2U+9o8Rbxkx2q034Ul0y1PZlLN9n+QdD9tYofVATgY9M5fYie18EdH7HAzbLJ+PT x69T9OqDCtULJp5ysISY0t7B9SpjwzSlyusDbgPkrWXBZsyuqvC1nn1Lsx5xj7Izq4kx1UhR 8JOMyWhiMsdv0DLAJXVlkyCi6uwXaEV3SqL/mOKxHeRtltfXQ02XLiEFXETa03KrMjos0PPS 7j9bNZvegBFyMOENu5Lcoiw3QgAHqulYo6GJT3oyALSTV6Sy7iBbZTnYTAY1STZUg0flhwLu GyBPk44DzugpGTXCHpvE0juagXi67obyjvzQ0kqwgWNd0Ak2aCy/0tfgfWHUP471LYNsTo+o S9zEVX70s+cWL/i70JxOb5RZ98w+gINzWXCqwl0JYCtNYhnj18aNQ5ztkrzyB9tDYhD18U35 iBPrkI6OeeT11VPcCmd1Jb7N+jMK2X8yxuobrbfxlDU1Nv+EkIn4vAxokj8thuuG0lk/mg1i 7G9PFOW4pzDERUYS5X8UQA66kojz1k7Siw05oeS33llOLSruCXF1tFvCfZ3kn6d
  • Ironport-sdr: 651b14ad_kQDyw5Z3iFtq13fCWUlknNrNGxdDcYH55Dm0whxlz8PSmMQ MfE0h0oYqqFpx/9+2XdpuWg1cdPzN4QEvNaTYwg==

Hi Frédéric,

In this particular case, you don't really need an additional inductive proof for your transitivity lemma. The other lemmas you've already proven are sufficient. This is because your subtyping relation is somewhat trivial, as you prove yourself through your sub_is_eq lemma. You can prove transitivity as follows:

Lemma trans:
forall t1 t2 t3,
typeSub t1 t2 -> typeSub t2 t3 -> typeSub t1 t3.
Proof.
intros. apply sub_is_eq in H. apply sub_is_eq in H0. subst. apply refl.
Qed.

This is obviously no longer possible once you define a more "interesting" subtype relation.

Lasse

On 02-10-2023 19:53, Frederic Fort wrote:
Hello,

I am trying to prove the some facts about the type system of a simple Lambda calculus. However, I struggle to prove the transitivity of the subtype relation.
I have seen in papers that certain people simply "axiomatize" properties like transitivity and reflexivity by defining specific rules for these properties.
However, I find this inelegant as this makes proofs in other places more "cluttered" due to the additional constructors.
I have a few proofs that work fine. For transitivity however, I am stuck.
I have tried all kinds of (dependent) induction approaches, but I am generally stuck either because Coq requires me to prove that the unit type is a subtype of a function type or because the induction hypothesis doesn't take into account that subtyping of function input types is in the "opposite direction".

I suppose that there is some "Coq trick" that I am unfamiliar with (maybe I have to define a custom induction scheme ?).
Or maybe it is actually impossible to prove transitivity like that.

If somebody could show me what I am missing, I'd be grateful.

Yours sincerely,
Frédéric Fort

Here are my definitions:
Inductive expr :=
| Unt
| Var (n : nat)
| Lam (v : nat) (e : expr)
| App (f : expr) (arg : expr)
.
Inductive type := | TUnit | TFun (tin tout : type) .
Inductive typeSub : type -> type -> Prop := | SubTUnit : typeSub TUnit TUnit | SubTFun : forall ti1 to1 ti2 to2, typeSub ti2 ti1 -> typeSub to1 to2 -> typeSub (TFun ti1 to1) (TFun ti2 to2) . Lemma refl: forall t, typeSub t t. Proof. intros. induction t; constructor; auto. Qed. Lemma sub_is_eq: forall t1 t2, typeSub t1 t2 -> t1 = t2. Proof. intros. induction H. - reflexivity. - rewrite IHtypeSub1. rewrite IHtypeSub2. reflexivity. Qed. Lemma trans: forall t1 t2 t3, typeSub t1 t2 -> typeSub t2 t3 -> typeSub t1 t3. Proof. intros t1 t2 t3 HSubL HSubR. Admitted.


Archive powered by MHonArc 2.6.19+.

Top of Page