回答:
いろいろな人がこの種の証明に興味を持っています。ニール・クリシュナスワミはこの特定の定理をここで述べました。Frank Pfenningが順序付けられたロジックの優れた例をいくつか示していることも確認しました。たとえば、がある場合、順序付けされた型システムでは、はリストと追加する必要があります。
簡単に言えば、はい、私たちはあなたの最初の例を証明できます。ラムダ計算のコンテキストでは、論理関係ベースのアプローチがこのペーパーで説明されています。彼らは2つのステップであなたの定理を証明します:
しかし、効果のある言語を見ると、この種の定理はさらに面白くなり、そのような言語でそれらを証明する能力は悲しいことに制限されます。たとえば、同型について考え from System F. call-by-value設定では、非終端を追加すると、この同型が破られます。ただし、線形型を使用すると、同様の同型を復元できるはず。残念ながら、これを証明できる論理的な運用関係はありません。
そうは言っても、この同型と定理の両方を証明できる構文的方法もあります。これは線形設定では特に有用なアプローチのようであり、単純な定理を証明するための論理関係を設定するよりもはるかに負担が少ないです。
編集:あなたが尋ねたので、これはタイプ自由定理の構文証明の例ですある設定のは、永久にループし、任意のタイプの任意のコンテキストで適切に型指定されます。アイデアは、型の標準的な用語のセットを見つけ、それを使用して関数の可能な戻り値を決定することです。適切に型付けされた用語の健全性定理から始めます。
定理(正準性)。場合次にどちらか
- 。これはような値。
- 、、および自由変数を使用しようとしているために行き詰まっている用語または
ここで、は、言語の同等性のあなたの好きな概念であり、は、自由型変数を含む環境です。自由変数を値と見なします。単純な言語の場合、この定理を正当化するために、単純な進歩と保存の議論を行うことができます。
ここで、値、であることがわかりここで。eのタイプから、いくつかのケースが考えられます。
2番目のケースが1つだけ残っているため、と仮定しここで、。これまでのところ、証明として、を確立しましたです。最後に、正則性定理をもう一度適用し、が発散する必要があることを確認します。タイプ値は変数のみですが、コンテキストには2つの変数があるため、場合は当てはまりません。
したがって、唯一の住人がいることになりは。
あなたはこの種の証拠の参照を求めましたが、私は良いものかわかりません。この種の推論は特定の分野でよく知られており、おそらくゲンツェンまでさかのぼります。それはシーケンシャル計算のための焦点を合わせた証明探索を連想させると言われていますが、私は接続が何であるか正確に知りません。
とは言っても、この比較的単純な方法をよく説明している現代の出版された作品は知りません。確かに、それはより単純な言語への適用性が少し制限されています。一方、「Theorems for Free!」には影が薄いと思います。他、その結果、多くの上級研究者でさえ、「自由定理」というフレーズを聞くとすぐに論理関係を考えます。このような手法は、そのような証明へのより簡単な代替アプローチになる可能性があることに気づきません(特に線形型システムの場合)。
2番目の例については、あなたが望む自由な定理は実際には成り立たないと思います。たとえば、を整数型でインスタンス化してから、に指定したリストにない整数を返す関数を渡すことができます。おそらくは、あなたが考えていたタイプに近いでしょう。ただし、その場合でも、入力を複製する必要があるため関数はありません存在しません。