Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Simplifying a function (exactly) once?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Simplifying a function (exactly) once?


Chronological Thread 
  • From: Jason -Zhong Sheng- Hu <fdhzs2010 AT hotmail.com>
  • To: "coq-club AT inria.fr" <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Simplifying a function (exactly) once?
  • Date: Tue, 25 Feb 2020 21:48:02 +0000
  • Accept-language: en-CA, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; 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=+l9UjVVxnRWxvstatKExQ8u5jJ9yCVhH723wbwbME7A=; b=O6wOsin0kqiMVYWXvudzXM0E95qeYdHl1b1aY2kfrUoI9lGI8R5djHVgSnzqesKUPVlplOx3MROrpGIlEQmQcT7B7WTWrzY+7Tg+0DRYGMh3dCvpibZuoOZZebr54wlpj99hZmOkSu5f1S3R2GgNUbym54xe21/zy5sChCQ7djrWgfZro5LFr4E/eb4meBxM9PdClJNayCv8uQnjxPbT3JClla5rnhFcaVAwq9JSEaOMwlnQlAL5gpPsFPgUAzOwPmMF9P1tlDE/70N89bDfN5bSvCSIrwDS6rwaAyUzSr6GBvROh9oLRA7QJ8AeF6yI6Py59PQf4mkFIY5CybHCng==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ewrkJ9cFVLHBaWBrrqSDQz3UXAqYMUQ8HdtWDl2HIW8ZJ32p26gXD8QZN+/l99wX/wQZpuQlw6U854u5fpRgzT+YieBFFGuw5KtrF1N+R4SEaf06nUu2aMYVMhmEtsguM1fJqGpXSVi9noUWQ46DXE8oOJ5wID5l26DFCee+Cw+jLl9gx0MzWZ2ZVcAoiCQNHWeqyKAEQQjPiIpn6+yfUT3GVtmFP9+L5AS6muzvxmouUs1SjHuP+rDu+4wcNg92zLWrDj7uHBTDD1FRbEHdCj4tJbD1PGZmep1BiCFiCmkJq6Q2KUNwDxGSfL31weT2CJDdP42ffVagU0BL91XEDg==
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=fdhzs2010 AT hotmail.com; spf=Pass smtp.mailfrom=fdhzs2010 AT hotmail.com; spf=Pass smtp.helo=postmaster AT NAM12-BN8-obe.outbound.protection.outlook.com
  • Ironport-phdr: 9a23:EtyMuRDggXDvO8+y4mCaUyQJP3N1i/DPJgcQr6AfoPdwSPX4ocbcNUDSrc9gkEXOFd2Cra4d16yH6eu5BDRIyK3CmU5BWaQEbwUCh8QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6OPn+FJLMgMSrzeCy/IDYbxlViDanbr5+MRq7oR/Vu8UIjoduN6Y8xgfUqXZUZupawn9lKl2Ukxvg/Mm74YRt8z5Xu/Iv9s5AVbv1cqElRrFGDzooLn446tTzuRbMUQWA6H0cUn4LkhVTGAjK8Av6XpbqvSTksOd2xTSXMtf3TbAwXjSi8rtrRRr1gyoJKzI17GfagdF3g6xGvRKhvAR/zJDIb4GJOvR+eabdcskbRWpHQ81dUyNMD4e5Y4YJEuEPP/tXr5PlqlUOsxWwGBWsCu3sxD9GhHD5waI13v87Hg3awAAtBc4CvGjKoNjzKawcUfq1zK7NzTjba/1Zwyz96I/Ochs8uP2DXrJwcc3XyUkgCgjLk1WQppLjPzOaz+gGrmqV7/d9Xu+ohW4otgFxozm0xssyloXFm54Zx0vE9SV+3IY1IMe3SE9/YdK+DJRQsCSaOpJwT8g/TW9ovyM6xacHuZ69ZCUKx5UnxwLfa/yaaIeE+BPjVOGXLDxlh3xlYKqyihmu/US6zuDwSNO43EhXoiZfltTBuGgB1xLN5cWEVvdw+0Ks1DKT2w/J8e5JJE45mbTUJpE7x7M8iJ4evETBEyLznEj6krKZe0Ui9+O18eroeK/mqYWZN4JsigHxLKAumsunDOogLgUAWHWX9fql2LD+5UP0Q6xGjvotnabHqpzaItkbprKiDA9Sz4Yj7QuwAy2+0NQCmnkHMExKdw6bj4joPFHOJur0DfCig1SwlDdrwPfGPr77DprRKXjDla/tfbd760FC1Ao+1d9S645OBrwFPv7/QFH9uMHCAhI9PQG42+PnB8981oMaV2KPGKiZMKbKvF+G++0vI+iNZJQLtDrhNvQp++XjjX8+mV8BeKmmx5oXaHSiEvt6JEWZZGLggs0dHmcSogo+UOvqhUWeXj5Ufna+Rr4z5jUmCI29ForDXYCsgLmZ3CihBJFWZ2ZGCkqNEXjybYmEVe0MO2quJZormTsdELOlVoUJ1Be0tQa8xaAtZr7f/TRdvpb+3vB04ffSnFc872onId6a1jSvRnpzmCtNdT8x2q83mkxwzFjGmYhly6hWGdxB/KkRC18SNZnAyuV7D5b5XQeXLYTBc0qvXtjzWWJ5ddk22dJbPxckR4eSyyvb1i/vOIc70qSRDcVvoKLbw334JsI7wHHDhvF40gsWB/BXPGjjvZZRsgjeA4mVzBe/voPzL+E2+n6I822Oi22ToEtfTQh8F73fWmwSbVfXqtK/4V7eS7ipCvIsNQ4TkJfTeJsPUcXgiBB9fNmmPd3fZ2yrnGLpXkSIwa+JZYvuPW4a2XeEBQ==

I didn't test everything but i think there are a few ways to proceed. I do think that it's a good idea for Coq to implement a tactic, say, `eval_step`, which takes a list of reduction steps and perform them in sequence. in this case, I think it would be `eval_step [delta, iota]`. notice that delta reduction is only specified once, so it only unfold the outer `eval2` and iota evals the pattern matching and leave the inner `eval2` as is.

that said, you can probably simulate this action:

unfold eval2 in H3; cbn [iota] in H3.

in particular, `delta` is excluded from `cbn` so I hope `eval2` is not unfolded.

another way is to remember `a0 :: l` by doing

remember (a0 :: l) as l0 eqn:?.

I expect this replaces all `a0 :: l` with `l0`, which allows you to do `simpl in H3`.

another potential way is to specify the list to have two cons:

simpl (eval2 _ (_ :: _ :: _)) in H3.

i would be interested in knowing which one works. please let me know.

Thanks,
Jason Hu
https://hustmphrrr.github.io/

From: coq-club-request AT inria.fr <coq-club-request AT inria.fr> on behalf of Agnishom Chattopadhyay <agnishom AT cmi.ac.in>
Sent: February 25, 2020 4:18 PM
To: coq-club AT inria.fr <coq-club AT inria.fr>
Subject: [Coq-Club] Simplifying a function (exactly) once?
 
Is there a way to specify to simpl to stop simplifying after exactly one step?

Basically, I have something like f(f(x)) which simplifies to some _expression_ in f(x). I only wish to simply this once and NOT get rid of the inner f(x)

---

More details:

I have

Fixpoint eval2 {A: Type} (mon: Monitor A) (l : list A) : (bool * Monitor A) :=
  match l with
  | nil => (false, mon)
  | (x :: xs) => let (_, mon') := eval2 mon xs in
               (mNext mon' x)
  end.

In a certain proof, I have

E3 : eval2 (MonAnd mon1 mon2) (a0 :: l) = (bl, ml)
and
H3 : eval2 (MonAnd mon1 mon2) (a :: a0 :: l) = (true, x)

I wish to use E3 effectively after simplifying H3 by one step. However, when I try to use simpl in H3, I get

H3 : (let (_, mon') :=
          let (_, mon') := eval2 (MonAnd mon1 mon2) l in mNext mon' a0 in
        mNext mon' a) = (true, x)



Archive powered by MHonArc 2.6.18.

Top of Page