簡體   English   中英

證明 function 在給定語言中的不可表達性

[英]Proving the inexpressibility of a function in a given language

我目前正在閱讀 John C。 米切爾的編程語言基礎 練習 2.2.3 本質上要求讀者證明(自然數)冪 function 不能通過小語言的表達式隱式定義。 該語言由自然數和所述數字的加法組成(以及 boolean 值、自然數相等謂詞和三元條件)。 沒有循環、遞歸構造或定點組合器。 這是精確的語法:

<bool_exp> ::= <bool_var> | true | false | Eq? <nat_exp> <nat_exp> |
               if <bool_exp> then <bool_exp> else <bool_exp>
<nat_exp>  ::= <nat_var> | 0 | 1 | 2 | … | <nat_exp> + <nat_exp> |
               if <bool_exp> then <nat_exp> else <nat_exp>

同樣,object 是為了表明冪 function n^m 不能通過該語言的表達式隱式定義。

直覺上,我願意接受這一點。 如果我們將求冪視為重復乘法,似乎我們“就是不能”用這種語言表達它。 但是如何正式證明這一點呢? 更廣泛地說,你如何證明一種語言的表達不能用另一種語言表達?

這是一種簡單的思考方式:表達式具有固定的有限大小,並且它可以執行的唯一算術運算來生成不寫為文字或作為變量值提供的數字是加法。 因此,它可能產生的最大數受限於加法數加 1 乘以表達式中涉及的最大數。

因此,給定一個提議的表達式,讓 k 是其中的加法數,讓 c 是最大的文字(如果沒有,則為 1)並選擇 m 和 n 使得 n^m > (k+1)*max( m,n,c)。 那么該輸入的表達式的結果不可能是正確的。

請注意,此證明依賴於允許任意大數字的語言,如另一個答案中所述。

沒有解決方案,只有提示:

首先,讓我指出,如果語言中有有限多個數字,那么取冪可以定義為表達式。 (你必須定義當真實結果無法表示時它應該產生什么,例如環繞。)想想為什么。

提示:假設只有兩個數字,0 和 1。你能寫出一個包含mn且結果為n^m的表達式嗎? 如果有三個數字:0、1 和 2 會怎樣? 如果有四個呢? 等等...

為什么這些解決方案都不起作用? 讓我們對它們進行索引並調用 {0,1} partial_solution_1的解決方案,{0,1,2} partial_solution_2的解決方案,等等。 為什么partial_solution_n不是所有自然數集合的解?

也許你可以用某種度量f: Expression -> Nat以某種方式概括這一點,這樣f(expr) < n的每個表達式expr在某種程度上都是錯誤的......

你可能會從歐幾里得證明有無限多個素數的策略中找到一些靈感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM