From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id F1412E0128 for ; Tue, 30 Aug 2022 14:33:20 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=aaronngray.lists@gmail.com; spf=Pass smtp.mailfrom=aaronngray.lists@gmail.com; spf=None smtp.helo=postmaster@mail-qk1-f177.google.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of aaronngray.lists@gmail.com) identity=pra; client-ip=209.85.222.177; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="aaronngray.lists@gmail.com"; x-sender="aaronngray.lists@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of aaronngray.lists@gmail.com designates 209.85.222.177 as permitted sender) identity=mailfrom; client-ip=209.85.222.177; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="aaronngray.lists@gmail.com"; x-sender="aaronngray.lists@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-qk1-f177.google.com) identity=helo; client-ip=209.85.222.177; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="aaronngray.lists@gmail.com"; x-sender="postmaster@mail-qk1-f177.google.com"; x-conformance=sidf_compatible IronPort-SDR: kyi4aeUvsbepoRVW7UR4LuLPINlVy/s4lNI8XDLLVQtNCL9kqv1jD7Ba5oZxWEeNTVsyML0N0+ 0j3vAbF55OueGsI24MnUPq8S5xzCT7/w/vDR81NrYcIPyL/0U2b1VoyDEjnq98bsKgeGYVRvyz j/glfXqxLLafAHNbJifI2dypybTqOE/EoCT01hQ5UrNYMovfsezFZH3brWr3ofRbVUOH+Jw4GA 5dEgyHRVN1f1Xu0jc4ZNOhCiVJ/ppKQ6tuEknygNWpyAQWU4PYukgy4YD4sI78v5vRh0ZAU1vq uyD/kqyspT523Z/6YlSVkZi1 X-IPAS-Result: =?us-ascii?q?A0CFCQC+Ag5jf7HeVdFaFgcBATwBBQUBAgEJARWBKgEkA?= =?us-ascii?q?oE6AgFlgQFWLwQLRYROkQ0DjD2SQgsBAwENEgEBHw8EAQE/gVSCdAKEZAIdB?= =?us-ascii?q?wEEMwYOAQIEAQEBAQMCAwEBAQEBAQMBAQUBAQECAQECBAQBEwEBGAkZBw4OB?= =?us-ascii?q?WABYQMBRIFPgXQLAzENgjUpAYNjAQEBAQIBEhEEGQEbHQEDDAYFCw0CAiYCA?= =?us-ascii?q?iIBEQEFARwGEyKCXIJsAQMNJQMQmzWBBEKKOHp/FgUXgQGCCQaETwoZKA1nA?= =?us-ascii?q?4FZAgcSfyoDAQGGcwIbSlKHSieCKYFLgnQ+gmIBAoFfFYNBgmUElwgBAwcDB?= =?us-ascii?q?AYFDwMDAiEBAgFEHgIJAyMRAwsQCBQXASEGBgEBBAEBAgwCAQQBBQMBBAUDB?= =?us-ascii?q?wIBBQYCCQMDAQgDAQEFAQMEAwMDAgcDAQIMBAgDAwIDBAICAgIBAwIHBQgEA?= =?us-ascii?q?gcCAgIBAgICBAIBAwkBAgMFAgIJCwEEAgIDAQMBAQIIBAkEAgMEAgEBAwIBA?= =?us-ascii?q?gIBBQIOBQEBAQECBQECAwEGBwIIAhwKAQMDAwICBQICAQIDAgIMAQEEAgECA?= =?us-ascii?q?QIGAQMBAgIDAQMBAgIDAgYJAgQBBQMDAgIDAQEFDwUCBAIBAgYFAgEBAQQBA?= =?us-ascii?q?wQEBgICAQMDAg4CBAEEAQIBASMDBAIDAQMXAQIBAgMDAwQGBwUCAQITAQIBA?= =?us-ascii?q?QEFAQIBAQMEBAcJAwICBAMDBQEBAgMCAQEBBwwCAgISAhMDAQYBDgUUAwIEA?= =?us-ascii?q?gIBAgIKAwECAgEDAgkCAQIBBSADAQEPJAEBAgICAgMEBwIBBAYDDQICAQEBB?= =?us-ascii?q?QYNAwIDCAEMAgcDAgEDBQICBAECBAoJAQICAQIEBQcCAQgEBQ0FCQsBAQIBA?= =?us-ascii?q?wcEAxECBQMFBQMDAgEKBQIDAQIBAQMEAQMEBgEBAgMCAgEGAgIBAQMDBAMBA?= =?us-ascii?q?gYCAgcCAwIBBAIDAwEBAQQCAgICAgMDCAMCCAcFAQYBAgEEAwICAQIHAQQBC?= =?us-ascii?q?AIBAwMFAwQBCg8DBQMBAwMCFAoFAQMIBgkCBAUCBQMCBAIDAwICCAMCBAMCC?= =?us-ascii?q?wMCBgQCBwQPBwIDAgIFAgICAgIFBAMBAgICAgICBQIEAgEFAQICAQICAgQBA?= =?us-ascii?q?gIHBAIDAQMEDgQDAgICBQECAgEGAgcDAQIBBAMBAQQCBAECBQIEAQMBAgYCB?= =?us-ascii?q?AMKAgMCAgIGCAMDDAkCAwUCBAEBAgcEAgILAQYCBwICAQIDEAEDAgEEBQUDA?= =?us-ascii?q?wMJAgIDAgQCAgoBAQEBAgIBBQUCBAcPAgICBAICAgEDAgIBAQICBQQJEgEBA?= =?us-ascii?q?gMGBAYFAwIIGAEGAgIBAQICAgMDAgYCAQIIAgQBBAUCAQICAgIEAQMGAgMBA?= =?us-ascii?q?QIBAgIDAwIBBAIEAwMBAgECAgIDAgICAwICARACBgYBAgICAgIDAgIBAgEFA?= =?us-ascii?q?QIBAgQCBwIEAwIBAgIFAgICAwEBBgIECwEDAgcGAQMCBwUCAwECAwQDAwsFD?= =?us-ascii?q?AgBBQEDASEDAgIIAgcCAQUDBQEPAwICAwICAQQKAgMFAgQCAQIBBAkHAgQBA?= =?us-ascii?q?gkDAwYCBwUYAQICBwQMCgICAgUGAgQBAQEBAwECAgECAwQCAwIEBQEFAgECB?= =?us-ascii?q?QQCAgEBAgUCDAECAQcGAgcDAgICAwEEAgECAQMDAgMBAQEDBgYFCQQCAwMGA?= =?us-ascii?q?gICBgICAwISAwYHAgYDAgQBDQ4FBAcIAQIBAQIHAgQCBwkCXJNwgUGCEIExB?= =?us-ascii?q?gEBgREHdpMDFq8HB4NVgUWICIFelHsyg3aBUIsAmC8dlmqNOZRqL4R+ECMSg?= =?us-ascii?q?UIkgVsfFBojUDGCNglFAQIBAQENAQIBAQMBAgECCQEBApIPgT6DVoVLQzECO?= =?us-ascii?q?QIGAQoBAQMJilsBAQ?= IronPort-PHdr: A9a23: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 Rtk0mOWhMwi8T7t5xE8IV+Y/EMN IronPort-Data: A9a23:YldXDa3gYqYrBvXPRvbD5eR3kn2cJEfYwER7XKvMYLTBsI5bp2FUn GsZXGnQaPaMZzf3KI10OoW+9hgCupPdy4UwHFBp3Hw8FHgiRejtVY3IdB+oV8+xBpSeFxw/t 512hv3odp1coqr0/0/1WlTZhSAgk/nOHNIQMcacUsxLbVYMpBwJ1FQywIbVvqYy2YLjW1PW4 YuryyHiEAbNNwBcYjp8B52r80sHUMTa4Fv0aXRjDRzjlAa2e0g9VPrzF4npR5fLatU88tqBe gr25OrRElU1UPsaIojNfr7TKiXmS1NJVOSEoiI+t6OK2nCuqsGuu0o2HKJ0VKtZt9mGt8FDl fBqmq3vcz4oBYTqu940ChpTLj4raMWq+JefSZS+mcmazkmDani1hvs3Ux5wMoof9eJ6R2pJ8 JT0KhhXNkHF17/wmujhDLAz2azPL+GzVG8bknhp1zbfC/k8SIGFR6TR+cRw0zI5h8QIFvHbD yYcQWA1ME2QO0wWUrsRIKkGxsCx3invSDJ3i1KKu6s18nGUyAMkhdABN/KMIoDQLSlPpW6Tr 2fCumD4GQ0yL82a0TPD83S2h+aJkzmTZW4JPLix9/ovmV7Kg2JKV0JQWly8rv20zEW5XrqzN nD45AI/n/UX02OaEePEXiaRhl2+l0cfUOdPRrhSBB629oLY5AOQB24hRzFHacA7uMJeedDM/ g/Z9z8OLWw/2IB5WU5x5Z/P8mzvYXl9wXsqIH5bHVFcsrEPtalq1kqXJuuPBpJZmTEcJN0d6 zWDrSx7nrZKyMBSiPr98lfAjDah4JPOS2bZBzk7vEr1sWuVh6b/P+REDGQ3C94dfe51qXHf5 BA5dzC2trxmMH10vHXlrB8xNL+o/e2ZFzbXnERiGZIsnxz0pSD6ItEPsWomfxgzWirhRdMPS B+D0e+2zM8DVEZGkYcqC25MI593k/a4RISNug78N4MfOskZmPC7ENFGPBbMhQgBYWAjlqYwP ZrzTCpfJSdyNEiT9xLvH711+eZzmEgWnDqPLbimkUnP+efBPBa9F+1ZWHPQNbtRxP3f8G3oH yN3bZTiJ+N3C72gPEE6MOc7cTg3EJTMLcqt8pEIK77dfVYO9aNII6a5/I7NsrdNx8x9/tokN FnmMqOB4Fag13DBNyuQbXVvNOHmUZpl/CA0OCUtORCj3H16OdSj66IWdp0We7g79bw7naQkE aVdI8jQUO5STjnn+igGacavoYFnciOtj13cMiegZg85YJM9FRfC/cXpf1e0+SRXVni3uMIyr qeOzATeRZZfFQ1uANyHOv2qxlK1+3ManbsqDUfPJ9BSfmTq8ZRre3Sh1K9pf5lUJEyalDWA1 guQDRMJnsX3otc4oIvTmKSJj4a1CO8hTEdXGm/s67zpZyTX+2yUx5AZDLSFcDXbY2PD+Ku4Y NJTwfyhYuYMm0xHstYlHrtmkfA+6t/oq+MIxwhoBi+XPVGiC7clO3rfmMcW6fILybhetg+7H EmI/4ACa7mOPcrkFn8XJRYkPrvfj6BKwmGK4KRnOlj+6Q924KGDDRdYMS6KhXEPN7ByKo4kn bostZJE8QC5kRZ2YN+KgjoOqzaJJ30EFrwk79QUWdC0zAUszV5GbNrXDSqvuMODbNBFM08LJ D6Ihfqd2+4NmBKaK3djR2LQ2ed9hIgVvEwYxlE1IVnUyMHOgeU63UEM/Dk6JuiPIs6rDw6u1 qlX20xJyWGm+j5pgI1aXDnpFVgeW1uW/Uv+z1ZPn2rcJ6VtuqohM0VlUdthPmhAm46fQtSf1 L6dwWfhFz3teakdGwMsDFV9paWLocNZr2X/dQPOIyhBN5Y/aDvhxKSpYALkbvch7dwZ3CX6m AWhwAq8hWAX+8LdT23XxrR2DYgtdS0= IronPort-HdrOrdr: A9a23:yFJDOqr21CK6JFuV2/GJgLwaV5oeeYIsimQD101hICG9vPbo7v xG+85rriMc6QxhIE3I/OrrBEDuewK4yXcY2/hyAV7mZniEhILKFuBfBOnZslnd8kTFn4Y36U 4jSchD4bbLfD9HZKjBkW+F+hUbrOVvMprEuQ4T9RhQpMhRBZ1d0w== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.93,274,1654552800"; d="scan'208";a="22418091" X-MGA-submission: =?us-ascii?q?MDG5RL/xcjwn3jXGIFMgYb6pm1UJYrBuvpIMGi?= =?us-ascii?q?LR6T0EMN7HdVlcs/cBxhNES5YOOG0IIwepBlK8fvLaNPEAO5GdnOpT2S?= =?us-ascii?q?Li3W0l2qRQepar6DtqZkaQsmomZd83iNCsobp0f0jIPWRoEMDXzZbBL7?= =?us-ascii?q?0xz5/rLSfeqDRCKdtaMCWzYA=3D=3D?= Received: from mail-qk1-f177.google.com ([209.85.222.177]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Aug 2022 14:33:19 +0200 Received: by mail-qk1-f177.google.com with SMTP id w18so8224541qki.8 for ; Tue, 30 Aug 2022 05:33:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=qF+uSaCGF8LHID01TJ0ae9UpsKA3KvVkUt37OlcGSEw=; b=Xj7SpiZLr2F069kmCYMf54ddUlmizKQ+BeYAf3hiJrKQODxjWeqQty+fTjwMqiNXxf aGZmbqoLgy0g+cHjvq3RMIHJpw/03XHxgQrw/Y0EleDOEALADxnr7t2igNo0xa6GPVSc aMOM9P+3/GoQEkIqRQ7c7kY3IP14QyUhsUHienRODCa3xlUyrCBulgeVfU5auyc1DCbE dn9jaD2oYt1QUEhAMuJwl6A/cYOFmOErJ6gABErNoAOfGyw46ac4v8AG6O6qcE5s5Snn H/K1SW97lijRYnkbZ8tZvHUNFpoxvxwURk8yXYMtxvsfIKz6RS+5A6EolA5KEaSb0vfA Qpxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=qF+uSaCGF8LHID01TJ0ae9UpsKA3KvVkUt37OlcGSEw=; b=PoS72y8J9kJqaGpswPrn1n+M26wSnn1ZxItd6drCTwV11yxcSUG6tZwkKLxIgbvI2G Ox1/zDC7qUCd5v9KmqIaH5tEIyF//Vcwa1pDPiQdOhVTG3TvRC1BH4aBdb4UFJiss2l1 Kks78mglgbxx8fFcPLRaqXjKPBxhtMB6z0pfse3yA+6+ipRrMhsURq+eVkftzzn60sjD ccbJSMGkEHtK6A6uJPKtDyVVgIrAQN0zlAOjEyinWr6FBFRdIwWDiw62AUhfSWDO07yO xfLpF4oCEwYP3N4F8CYj5PRFHU7IyLbXm+3ZcjwO3vcWugMYTG0g7uCvY2pqqJlAQSdU 9LKQ== X-Gm-Message-State: ACgBeo1F8DILW7bw0c1GxsGCQ9JidbImDjavqdVIOiNVetPo71CVC/pp pR13PDeS9EOX8yh3WYe0QhNiQu76Kr8VufaJjudhaWI69W4= X-Google-Smtp-Source: AA6agR66DnToE+nwNZ33fSUXTiKkl1rMNxV04mYRDPS8D958+co7lk2M6plBPBLRDvRshDlgM285ufQjDVBy7QFraao= X-Received: by 2002:a05:620a:22d3:b0:6be:87e1:ebe with SMTP id o19-20020a05620a22d300b006be87e10ebemr6249078qki.763.1661862798492; Tue, 30 Aug 2022 05:33:18 -0700 (PDT) MIME-Version: 1.0 References: <25e68e2c-04d2-7764-e189-00812c08a34a@inria.fr> In-Reply-To: From: Aaron Gray Date: Tue, 30 Aug 2022 13:33:01 +0100 Message-ID: To: Xavier Leroy Cc: OCaML Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [Caml-list] coinductive data types On Tue, 30 Aug 2022 at 12:12, Xavier Leroy wrote: > > On Tue, Aug 30, 2022 at 9:24 AM Fran=C3=A7ois Pottier wrote: >> >> >> Hello, >> >> Le 29/08/2022 =C3=A0 17:43, Aaron Gray a =C3=A9crit : >> > Does either ML or OCaML have coinductive data types ? And if so could >> > you please point me at the/some appropriate documentation on them. >> >> ML and OCaml have algebraic data types, which are recursive (that is, >> more general than inductive and co-inductive types). Algebraic data >> type definitions are not subject to a positivity restriction, and >> algebraic data types can be constructed and deconstructed by recursive >> functions, which are not subject to a termination check. Hello Xavier, Thanks for putting me straight on that. My original path of inquiry which I should have actually stated was regarding how to go about implementing subtyping of mutually recursive algebraic data types. I am looking on how to go about this and using coinduction and bisimulation seemed like the best fit or correct way to go about this. Does OCaML use/handle subtyping of mutually recursive algebraic data types ? And if so, is its implementation easily accessible ? >> If you want to see a typical example of a "co-inductive" data structure >> encoded in OCaml, I suggest to have a look at "sequences", which can be >> described as potentially infinite lists: >> >> https://v2.ocaml.org/api/Seq.html >> > Lazy evaluation (type Lazy.t) can also be used to define coinductive data= structures. > > For concreteness, here are two definitions of the type of streams (infini= te lists) : > > type 'a stream =3D unit -> 'a streamcell and 'a streamcell =3D { head: 'a= ; tail: 'a stream } > type 'a stream =3D 'a streamcell Lazy.t and 'a streamcell =3D { head: 'a;= tail: 'a stream } > > and of the stream of integers starting from n : > > let rec ints n =3D fun () -> { head =3D n; tail =3D ints (n + 1) } > let rec ints n =3D lazy { head =3D n; tail =3D ints (n + 1) } Thank you, yes I am familiar with this type of usage. Regards, Aaron >> > > Hope this helps, > > - Xavier Leroy > > >> >> -- >> Fran=C3=A7ois Pottier >> francois.pottier@inria.fr >> http://cambium.inria.fr/~fpottier/ --=20 Aaron Gray Independent Open Source Software Engineer, Computer Language Researcher, Information Theorist, and amateur computer scientist.