coq-club AT inria.fr
Subject: The Coq mailing list
List archive
Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function
Chronological Thread
- From: Yannick Forster <yannick AT yforster.de>
- To: <coq-club AT inria.fr>
- Subject: Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function
- Date: Thu, 18 May 2023 19:48:13 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=yannick AT yforster.de; spf=Pass smtp.mailfrom=yannick AT yforster.de; spf=None smtp.helo=postmaster AT himalia.uberspace.de
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:IUrD5qgci+wJUbFXeXa855zzRXBQXhAji2hC6mlwRA09TyX5ra qTdZUgpHvJYVMqKQodcL+7V5VoLUmwyXcx2+gs1NSZLWzbUQmTQr2KhLGKq1aQYxEWtNQ86U 4KSdkdNDSfNzRHZIrBkWqFOudl+8Of+KSkwczX1B5WPGZXQpAl1B1hAgKXVnZ7XQ9cGPMCZf yhz/sCnCC4cXAbKv6wAGIINtKz3uH2qA==
- Ironport-phdr: A9a23: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 ObKhNTvzaJ1lLg5BgUdPWE=
- Ironport-sdr: 646664e0_8BZT94ut1TlyOAPGxiP4GfqCXa+7Ty8eYL0TwexLqqmP1Q4 PcB7gn1QcuiphPhHOQAY/eQPpPp0RUGQdxuqK/Q==
Hi Mukesh,
in computability theory this intuition is behind Kleene's normal form theorem: https://en.m.wikipedia.org/wiki/Kleene%27s_T_predicate
You can prove the normal form theorem for computable functions in Coq when defining them using some model of computation. But since given any concrete Coq function (over natural numbers or some suitable datatype isomorphic to numbers) you could have implemented it as a function in a model of computation provided enough time and endurance, this means you can re-write any definable Coq function as a fueled primitive recursive function, yes.
Best
Yannick
On 18 May 2023 19:35:56 mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:
Hi everyone,Is it always possible to turn a non-primitive (terminating) recursivefunction into a primitive recursive function by passing a naturalnumber as a fuel? If so, is there any formal underpinning for this,i.e., turning a non-primitive (terminating) recursive function into aprimitive recursive function by passing a natural number, or is itjust obvious? My intuition says it's true but I am very keen to seesome formal reasoning.For example, I can write a function that computes a byte list from a(binary) natural number like this [1] (I call it non-primitive(terminating) recursive function but I may not be correct with myterminology):Definition length_byte_list_without_guard : N -> list byte.Proof.intro np.cut (Acc lt (N.to_nat np));[revert np |].+refine(fix length_byte_list_without_guard np (acc : Acc lt (N.to_nat np)){struct acc} :=match acc with| Acc_intro _ f =>match (np <? 256) as nppreturn _ = npp -> _with| true => fun Ha => List.cons (np_total np Ha) List.nil| false => fun Ha =>let r := N.modulo np 256 inlet t := N.div np 256 inList.cons (np_total r _) (length_byte_list_without_guard t _)end eq_reflend).++apply N.ltb_lt, (nmod_256 np).++apply N.ltb_ge in Ha.assert (Hc : (N.to_nat t < N.to_nat np)%nat).unfold t. rewrite N2Nat.inj_div.eapply Nat.div_lt; try abstract nia.exact (f (N.to_nat t) Hc).+apply lt_wf.Defined.But I can also write the same function by passing a natural number [2](from top level,I just need to ensure the right amount of fuel):Fixpoint byte_list_from_N_fuel (n : nat) (up : N) : list byte :=match n with| 0%nat => [np_total (N.modulo up 256) (nmod_256_dec up)]| S n' =>let r := N.modulo up 256 inlet t := N.div up 256 inList.cons (np_total r (nmod_256_dec up)) (byte_list_from_N_fuel n' t)end.Best,Mukesh[1] https://github.com/mukeshtiwari/Coq-automation/blob/master/Opaque.v#L75[2] https://github.com/mukeshtiwari/Formally_Verified_Verifiable_Group_Generator/blob/main/src/Sha256.v#L239
- [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Yannick Forster, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Mario Carneiro, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Yannick Forster, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Xavier Leroy, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Xavier Leroy, 05/20/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Gaëtan Gilbert, 05/20/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Xavier Leroy, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Vedran Čačić, 05/22/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/22/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, mukesh tiwari, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Yannick Forster, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Stefan Monnier, 05/19/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Mario Carneiro, 05/18/2023
- Re: [Coq-Club] Turning Non-Primitive Recursive Function into Primitive Recursive Function, Yannick Forster, 05/18/2023
Archive powered by MHonArc 2.6.19+.