Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Puzzle: tactic that can check Sort subtyping without adding universe constraints?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Puzzle: tactic that can check Sort subtyping without adding universe constraints?


Chronological Thread 
  • From: Pierre Courtieu <pierre.courtieu AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Puzzle: tactic that can check Sort subtyping without adding universe constraints?
  • Date: Sat, 6 Feb 2021 11:06:58 +0100
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=pierre.courtieu AT gmail.com; spf=Pass smtp.mailfrom=pierre.courtieu AT gmail.com; spf=None smtp.helo=postmaster AT mail-io1-f44.google.com
  • Ironport-phdr: 9a23:mDl95xeceqcN4tSmU+9nXjERlGMj4u6mDksu8pMizoh2WeGdxcS4YB7h7PlgxGXEQZ/co6odzbaP4ua8CSdYvd6oizMrSNR0TRgLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9vKBi6twrcu8oZjYd+Jas61wfErGZPd+lK321jOEidnwz75se+/Z5j9zpftvc8/MNeUqv0Yro1Q6VAADspL2466svrtQLeTQSU/XsTTn8WkhtTDAfb6hzxQ4r8vTH7tup53ymaINH2QLUpUjms86tnVBnlgzoBOjUk8m/Yl9ZwgbpUrxKvpRNxw4DaboKIOvRgYqzQZskVSXZbU8tLSyBNHoGxYo0SBOQBJ+ZYqIz9qkMUoxu/GwasHvnvxSFVjXLo2q06zv4hER3H3AM+AtIFrXPZrM30NKgMS+C11rfHwS/fYPNRxDf98pTIchE/rvGRRr9wfs/RxlMuFwPBlFmftYvlPzaM2+kLrmOU4PZuW/i1hG47twF+vCKvxsE0h4TJmI4bxE7I+Ct7zYsoJtC1VFN2bN2rHZVQqiyUN4R7T8w/Tmx2uSs0yqMLtJCncSQXxpkq2R7SZvKFfoSU5h/uUvuaLzRghH99Zr6zmxK//VKjx+D8TMW4zVdHoytfntTDuX0A0QHY5NKdRftn5Eih3C6C1wDN5eFAJkA5ja/bJIQgwr40j5YTsEPDEjLvlEX4g6KbeV8o+uev6+TgbbXmooGTO5VohQH5N6Qigs2/AeImPQgSR2WX5/iw2bn58UD6QLhGlOA6n6jYvZzAKskWqba1AwpP3YYi7xa/AS2m0NMdnXQfNFJFeQyIj5LzO17QOvz3EfC/g0m2kDd3xvDJIKDhD47CLnjGirjhfLJ951RAxwo0yNBT/4hUBa0ZIPLvRk/xs8TVAQM+Mwyt2uroFNF91p4FVm+UGa+YMKbSsUeS6e41IumMYpUVuDfnJPQ/6f7ulyxxpVhIdq6wmJATdXqQH/J8Ikzfb2C/rM0GFDIyvwckVuGio1qfSyJSamv6C7o96yshBcStCprZWoGgnZSO2S66GttdYWUQWQPEKmvha4jRA6REUymVOMI0ymVVB4jkcJco0FSVjCG/zrNmKuTO/ShB7MDs0dF046vYkhRgrGUpXfTY6HmESiRPpk1NRzIy2/oi80l0y1PG0K8hxvIESZpc4PRGVgp8PpnZnbQjV4LCHznZd9LMc26IB828CGhoHN00yt4KJU16Hof6gw==

Hi Jonathan
Nice trick. I never realized that I was creating new constraints by doing this carelessly.
P

Le ven. 5 févr. 2021 à 23:35, jonikelee AT gmail.com <jonikelee AT gmail.com> a écrit :
On Fri, 5 Feb 2021 16:12:53 -0500
"jonikelee AT gmail.com" <jonikelee AT gmail.com> wrote:

> On Fri, 5 Feb 2021 15:32:49 -0500
> "jonikelee AT gmail.com" <jonikelee AT gmail.com> wrote:
>
> > Is it possible for an Ltac or Ltac2 tactic to check if one sort A is
> > a subtype of another sort B (an existing i<=j constraint between
> > sorts A=Type@{i} and B=Type{j}) without adding any new universe
> > constraints? 
>
> I think I figured it out - the trick is to use backtracking on success
> to undo added constraints:
>
> Ltac issubtype A B := (*assumes A and B are both sorts*)
>   first [constr_eq_strict A B
>         |let _:=constr:(B:A) in fail 1 "B is constrained <= A"
>         |let tA:=type of A in
>          let _:=constr:(B:tA) in fail 1 "A and B might be siblings"
>         |assert_succeeds (let _:=constr:(A:B) in idtac)
>         ].
>

That's not quite right.  This is better:

Ltac issubtype A B :=
  first [constr_eq_strict A B
        |let _:=constr:(B:A) in fail 1 B "can be <=" A
        |assert_succeeds (let _:=constr:(A:B) in idtac)
        |fail 1 A "and" B "are constrained to be unrelated"
        ].



Archive powered by MHonArc 2.6.19+.

Top of Page