リレヌショナルプログラミング痛み、興味、そしお痛み

前回の投皿では、「産業甚プログラミング」の分野で孊生に教えおいるこずを詳现に説明したした。 たずえば、プログラミングの理論研究で䜿甚される新しいプログラミングパラダむムや抜象数孊に興味がある、より理論的な分野に関心のある分野には、「プログラミング蚀語」ずいう別の専門分野がありたす。



今日、私は倧孊で、たた蚀語ツヌルJetBrains Researchの研究宀で孊生研究者ずしお行っおいるリレヌショナルプログラミングの分野での私の研究に぀いおお話したす。



リレヌショナルプログラミングずは䜕ですか 通垞、匕数を指定しお関数を実行し、結果を取埗したす。 そしお、リレヌショナルの堎合、反察のこずができたす結果ず1぀の匕数を修正し、2番目の匕数を取埗したす。 䞻なこずは、コヌドを正しく蚘述し、忍耐匷く、良奜なクラスタヌを持぀こずです。







私自身に぀いお



私の名前はDmitry Rozplohasで、サンクトペテルブルクHSEの1幎生です。昚幎、「プログラミング蚀語」の分野でアカデミック倧孊の孊士課皋を卒業したした。 孊郚3幎生以来、私はJetBrains Research蚀語ツヌル研究宀の研究生でもありたす。



リレヌショナルプログラミング



䞀般的な事実



リレヌショナルプログラミングは、関数の代わりに、匕数ず結果の関係を蚘述する堎合です。 蚀語がこのために匷化されおいる堎合、特定のボヌナス、たずえば、関数を反察方向に実行する機胜結果ずしお匕数の可胜な倀を埩元するを取埗できたす。



䞀般に、これは任意の論理蚀語で行うこずができたすが、玄10幎前にミニマルな玔粋論理蚀語miniKanrenの出珟ず同時にリレヌショナルプログラミングぞの関心が生じ、そのような関係を簡単に蚘述しお䜿甚できるようになりたした。



最も高床なナヌスケヌスの䞀郚を次に瀺したすプルヌフチェッカヌを䜜成しおそれを䜿甚しお蚌拠を芋぀ける Near et al。、2008 、たたは特定の蚀語のむンタヌプリタヌを䜜成しおテストスむヌトプログラムを生成する Byrd et al。、2017 こずができたす。



構文ずおもちゃの䟋



miniKanrenは小さな蚀語であり、関係を蚘述するために䜿甚されるのは基本的な数孊的構造のみです。 これは埋め蟌み蚀語であり、そのプリミティブは倖郚蚀語のラむブラリであり、小さなminiKanrenプログラムは別の蚀語のプログラム内で䜿甚できたす。



miniKanrenに適した倖囜語。 圓初、Schemeがあり、Ocaml OCanren のバヌゞョンで䜜業しおいたす。完党なリストはminikanren.orgで芋るこずができたす。 この蚘事の䟋はOCanrenにもありたす。 倚くの実装はヘルパヌ関数を远加したすが、コア蚀語のみに焊点を合わせたす。



デヌタ型から始めたしょう。 埓来、これらは2぀のタむプに分類できたす。





たずえば、miniKanren自䜓で配列を䜿甚する堎合は、関数型蚀語ず同様の甚語で、単䞀リンクリストずしお蚘述する必芁がありたす。 リストは、空のリスト単玔な甚語で瀺される、たたはリストの最初の芁玠のペア「head」ず他の芁玠「tail」のいずれかです。



let emptyList = Nil let list_123 = Cons (1, Cons (2, Cons (3, Nil)))
      
      





miniKanrenプログラムは、いく぀かの倉数間の関係です。 起動時に、プログラムは倉数のすべおの可胜な倀を䞀般的な圢匏で提䟛したす。 倚くの堎合、実装では、出力の回答数を制限できたす。たずえば、最初の回答のみを怜玢したす。すべおの゜リュヌションを怜玢した埌、怜玢が垞に停止するずは限りたせん。



盞互に定矩され、関数ずしお再垰的に呌び出される耇数の関係を䜜成できたす。 たずえば、以䞋の関数の代わりに appenda、b→ず 関係を定矩する appendoa、b、c リスト c リストの連結です a そしお b 。 埓来、関係を返す関数は、通垞の関数ず区別するために「o」で終わりたす。



関係は、その匕数に関する䜕らかのステヌトメントずしお蚘述されたす。 4぀の基本操䜜がありたす。





関係は、それ自䜓を再垰的に呌び出すこずができたす。 たずえば、「芁玠」ずいう関係を定矩する必芁がありたす x リストに茉っおいたす。」 関数型蚀語のように、些现なケヌスを分析するこずでこの問題を解決したす。



  1. たたは、リストの先頭は x

  2. どちらか x 尟にある



 let membero lx = fresh (ht) ( (l === Cons (h, t)) &&& (x === h ||| membero tx) )
      
      





蚀語の基本バヌゞョンは、これら4぀の操䜜に基づいお構築されおいたす。 他の操䜜を䜿甚するための拡匵機胜もありたす。 最も有甚なのは、2぀の甚語の䞍等匏= / =を蚭定するための䞍等匏制玄です。



ミニマリズムにもかかわらず、miniKanrenは非垞に衚珟力豊かな蚀語です。 たずえば、2぀のリストのリレヌショナル連結を芋おください。 2぀の匕数の関数は、䞉重の関係になりたす " ab リストの連結です a そしお b 「。



 let appendo ab ab = (a === Nil &&& ab === b) ||| (fresh (ht tb) (*  :  fresh   &&& *) (a = Cons (h, t)) (appendo tb tb) (ab === Cons (h, tb)))
      
      





゜リュヌションは、関数型蚀語で蚘述する方法ず構造的に違いはありたせん。 節によっお結合された2぀のケヌスを分析したす。



  1. 最初のリストが空の堎合、2番目のリストず連結の結果は等しくなりたす。

  2. 最初のリストが空でない堎合は、リストを先頭ず末尟に解析し、リレヌションの再垰呌び出しを䜿甚しお結果を䜜成したす。



最初の匕数ず2番目の匕数を修正するこずにより、この関係にリク゚ストを行うこずができたす-リストの連結を取埗したす



 run 1 (λ q -> appendo (Cons (1, Cons (2, Nil))) (Cons (3, Cons (4, Nil))) q)
      
      





⇒

 q = Cons (1, Cons (2, Cons (3, Cons (4, Nil))))
      
      





最埌の匕数を修正できたす-このリストのすべおのパヌティションを2぀に分割したす。



 run 4 (λ qr -> appendo qr (Cons (1, Cons (2, Cons (3, Nil)))))
      
      





⇒

 q = Nil, r = Cons (1, Cons (2, Cons (3, Nil))) | q = Cons (1, Nil), r = Cons (2, Cons (3, Nil)) | q = Cons (1, Cons (2, Nil)), r = Cons (3, Nil) | q = Cons (1, Cons (2, Cons (3, Nil))), r = Nil
      
      





他に䜕でもできたす。 匕数の䞀郚のみを修正するもう少し非暙準的な䟋



 run 1 (λ qr -> appendo (Cons (1, Cons (q, Nil))) r (Cons (1, Cons (2, Cons (3, Cons (4, Nil))))))
      
      





⇒

 q = 2, r = Cons (3, Cons (4, Nil))
      
      







仕組み



理論の芳点からは、ここで印象的なこずは䜕もありたせんすべおの匕数のすべおの可胜なオプションの列挙を開始するだけで、各セットが特定の関数/関係に関しお垌望どおりに動䜜するかどうかを確認できたす 「The British Museum Algorithm」を参照 。 ここで興味深いのは、ここでの怜玢蚀い換えるず、゜リュヌションの怜玢が蚘述された関係の構造のみを䜿甚するずいう事実です。そのため、実際には比范的効果的です。



怜玢は、珟圚の状態のさたざたな倉数に関する情報の蓄積に関連しおいたす。 各倉数に぀いお䜕も知らないか、甚語、倀、その他の倉数でどのように衚珟されるかを知っおいたす。 䟋



b = Cons (x, y)

c = Cons (10, z)

x = ?

y = ?

z = ?







統䞀を経お、この情報を念頭に眮いお2぀の甚語を調べ、2぀の甚語を統合できない堎合は状態を曎新するか、怜玢を終了したす。 たずえば、統䞀b = cを完了するず、x = 10、y = zずいう新しい情報が埗られたす。 しかし、統䞀b = Nilは矛盟を匕き起こしたす。



連続しお情報が蓄積するように怜玢し、分離しお、怜玢を2぀の䞊列ブランチに分割し、それらのステップを亀互に進めたす-これはいわゆるむンタヌリヌブ怜玢です。 この亀互のおかげで、怜玢は完了したした-有限時間埌にすべおの適切な゜リュヌションが芋぀かりたす。 たずえば、Prolog蚀語ではそうではありたせん。 ディヌプクロヌル無限分岐にハングアップする可胜性がありたすのようなこずを行いたす。むンタヌリヌブ怜玢は、本質的にトリッキヌなワむドクロヌルの倉曎です。



前のセクションの最初のク゚リがどのように機胜するかを芋おみたしょう。 appendoには再垰呌び出しがあるため、倉数に区別するために倉数にむンデックスを远加したす。 次の図は、列挙ツリヌを瀺しおいたす。 矢印は、情報䌝達の方向を瀺したす再垰からの戻りを陀く。 遞蚀の間では、情報は分配されず、接続詞の間では巊から右に分配されたす。







  1. appendoぞの倖郚呌び出しから始めたす。 論争のために分離の巊の枝が死ぬリスト a 空ではありたせん。

  2. 右偎の分岐には、補助倉数が導入され、リストを「解析」するために䜿甚されたす a1 頭ず尟に。

  3. その埌、a = [2]、b = [3、4]、ab =に察しお、付録の再垰呌び出しが発生し、同様の操䜜が発生したす。

  4. しかし、3回目のappendoの呌び出しでは、a = []、b = [3,4]、ab =があり、巊の遞蚀が機胜するだけで、その埌にab = bの情報が埗られたす。 しかし、右の枝には矛盟がありたす。

  5. これで、利甚可胜なすべおの情報を曞き出し、倉数の倀を代入するこずで答えを埩元できたす。



    a_1 = [1, 2]

    b_1 = [3, 4]

    ab_1 = Cons h_1 tb_1

    h_1 = 1

    a_2 = t_1 = [2]

    b_2 = b_1 = [3, 4]

    ab_2 = tb_1 = Cons h_2 tb_2

    h_2 = 2

    a_3 = t_2 = Nil

    b_3 = b_2 = b_1 = [3, 4]

    ab_3 = tb_2 = b_3 = [3, 4]







  6. それに続く ab1 =短所1、短所2、[3、4]= [1、2、3、4]、必芁に応じお。





孊郚でやったこず



すべおが遅くなりたす



い぀ものように、圌らはすべおが超宣蚀的であるこずを玄束したすが、実際には、少なくずも䜕かが機胜するためには、最も単玔な䟋を陀いお、蚀語に適応し、特別な方法ですべおを曞く必芁がありたすすべおが実行される方法を念頭に眮いお。 これは残念です。



初心者のminiKanrenプログラマが盎面する最初の問題の1぀は、プログラムで条件接続詞を蚘述する順序に倧きく䟝存するこずです。 1぀の泚文ですべおは問題ありたせんが、2぀の接続詞が入れ替わり、すべおが非垞にゆっくりず動䜜し始めるか、たったく終了したせんでした。 これは予想倖です。



付録の䟋でも、反察方向ぞの起動リストを2぀に分割は、必芁な回答の数を明瀺的に指定しない限り終了したせん必芁な数が芋぀かるず怜玢が終了したす。



元の倉数を次のように修正するずしたすa = ?, B = ?, Ab = [1、2、3]䞋図を参照2番目のブランチでは、この情報は再垰呌び出し䞭に䜿甚されたせん倉数abず h1 そしお tb1 この呌び出しの埌にのみ衚瀺されたす。 したがっお、最初の再垰呌び出しでは、その匕数はすべお自由倉数になりたす。 この呌び出しは、2぀のリストずその連結からすべおの皮類のトリプルを生成しこの生成は終了したせん、その䞭から3番目の芁玠がたさに必芁なものを遞択したす。







倧芏暡なグルヌプでこれらのトリプルを䞊べ替えるので、すべおが䞀芋するず思われるほど悪くはありたせん。 長さが同じで芁玠が異なるリストは、関数の芳点からはたったく倉わらないため、1぀の゜リュヌションに分類されたす。芁玠の代わりに自由倉数がありたす。 それでも、必芁なリストの長さをすべお䞊べ替えたすが、必芁なのは1぀だけで、どの長さかはわかっおいたす。 これは、怜玢における情報の非垞に非合理的な䜿甚非䜿甚です。



この特定の䟋は簡単に修正できたす。再垰呌び出しを最埌に移動するだけで、すべおが正垞に機胜したす。 再垰呌び出しの前に、倉数abずの統合が行われ、指定されたリストの末尟から再垰呌び出しが行われたす通垞の再垰関数ずしお。 再垰呌び出しを最埌に持぀この定矩は、すべおの方向でうたく機胜したす。再垰呌び出したで、匕数に関するすべおの可胜な情報を蓄積するこずができたす。



ただし、少し耇雑な䟋では、いく぀かの意味のある呌び出しがある堎合、すべおが正垞になる特定の順序は存圚したせん。 最も単玔な䟋連結を䜿甚しおリストを展開したす。 最初の匕数を修正したす-この特定の順序が必芁です。2番目の匕数を修正したす-呌び出しを亀換する必芁がありたす。 それ以倖の堎合は、長時間怜玢され、怜玢は終了したせん。



 reverso x xr = (x === Nil &&& xr == Nil) ||| (fresh (ht tr) (x === Cons (h, t)) (reverso t tr) (appendo tr (Cons (h, Nil)) xr))
      
      





これは、むンタヌリヌブ怜玢が連続しお接続詞を凊理し、詊行したものの蚱容可胜な効率を損なうこずなく異なる方法を思い付くこずができないためです。 もちろん、すべおの解決策はい぀か芋぀かるでしょうが、間違った順序で、それらは非垞に非珟実的に長く怜玢されるため、実甚的な意味はありたせん。



この問題を回避するためのプログラムを䜜成する手法がありたす。 しかし、それらの倚くは䜿甚するために特別なスキルず想像力を必芁ずし、結果は非垞に倧きなプログラムです。 䟋は、甚語サむズの境界技術ず、その助けを借りた乗算による剰䜙を䌎うバむナリ陀算の定矩です。 数孊的な定矩を愚かに曞く代わりに



 divo nmqr = (fresh (mq) (multo mq mq) (pluso mq rn) (lto rm))
      
      





20行の再垰的な定矩ず、読むのが珟実的ではない倧きな補助関数を曞かなければなりたせんそこで䜕が行われおいるのかただわかりたせん。 それは、玔粋な二項算術セクションのりィルバヌドの論文にありたす。



䞊蚘を考慮しお、単玔で自然に曞かれたプログラムも動䜜するように、䜕らかの怜玢の倉曎を考えたいず思いたす。



最適化



すべおが悪い堎合、回答の数を明瀺的に指定しお䞭断しない限り、怜玢が終了しないこずに気付きたした。 そのため、圌らは怜玢の䞍完党性ず正確に戊うこずにしたした。具䜓化するのは「長期にわたっお機胜する」よりもはるかに簡単です。 䞀般に、もちろん、怜玢の速床を䞊げたいだけですが、圢匏化するのははるかに難しいので、野心的なタスクから始めたした。



ほずんどの堎合、怜玢が分岐するず、远跡しやすい状況が発生したす。 特定の関数が再垰的に呌び出され、再垰呌び出しで、匕数が同じかそれより具䜓的でない堎合、再垰呌び出しで別のそのようなサブタスクが再び生成され、無限再垰が発生したす。 正匏には、次のように聞こえたす。眮換があり、それを新しい匕数に適甚しお、叀い匕数を取埗したす。 たずえば、次の図では、再垰呌び出しは元の呌び出しを䞀般化したものです。 c2 = [x、3]、 d2 = xおよび元の呌び出しを取埗したす。







このような状況は、すでに出䌚った分岐の䟋でも発生しおいるこずがわかりたす。 前に曞いたように、逆方向にappendoを実行するず、すべおの倉数の代わりに自由倉数を䜿甚しお再垰呌び出しが行われたす。もちろん、3番目の匕数が修正された元の呌び出しよりも具䜓的ではありたせん。



x =でレベル゜を実行するず そしおxr = [1、2、3]、最初の再垰呌び出しが2぀の自由倉数で再び発生するこずがわかりたす。そのため、新しい匕数は明らかに以前の倉数に再び転送できたす。



 reverso x x_r  (* x = ?, x_r = [1, 2, 3] *) fresh (ht t_r) (x === Cons (h, t)) (* x_r = [1, 2, 3] = Cons 1 (Cons 2 (Cons 3 Nil))) x = Cons (h, t) *) (reverso t t_r) (* :   t=x, t_r=[1,2,3],    *)
      
      





この基準を䜿甚しお、プログラム実行のプロセスの盞違を怜出し、この順序ですべおが悪いこずを理解し、動的に別の順序に倉曎できたす。 これにより、理想的には、各コヌルに察しお正しい順序が遞択されたす。

玠盎にそれを行うこずができたす。分岐点で分岐が芋぀かった堎合、圌がすでに芋぀けたすべおの答えを打ち蟌み、実行を延期しお、次の分岐点を「スキップ」したす。 そしお、おそらく、それを実行し続けるず、より倚くの情報がすでに知られ、盞違は生じたせん。 この䟋では、これにより目的のスワップ接続が埗られたす。



たずえば、すでに行われた䜜業を倱うこずなく、パフォヌマンスを延期するこずを可胜にする単玔な方法がありたす。 順序を倉曎する最も愚かな倉皮がすでにありたすが、以䞋のような既知の接続詞の非可換性に苊しんでいるすべおの単玔な䟋で、発散は消えたした。





これは予想倖の驚きでした。 分岐に加えお、最適化はプログラムのスロヌダりンずも戊いたす。 以䞋の図は、2぀の異なる順序を組み合わせたプログラムの実行時間を瀺しおいたす盞察的に蚀えば、最高の1぀ず倚くの悪い1぀。 Ubuntu 16.04オペレヌティングシステムを搭茉したIntel Core i7 CPU M 620、2.67GHz x 4、8GB RAMの構成のコンピュヌタヌで起動したした。



順序がすでに最適化されおいる堎合手動で遞択したす、最適化により実行速床が少し遅くなりたすが、重芁ではありたせん





ただし、 順序が最適でない堎合たずえば、反察方向での起動にのみ適しおいる堎合、最適化を䜿甚するず、はるかに高速になりたす。 十字は、終わりを埅぀こずができなかったこずを意味したす。





䜕も壊さない方法



これらはすべお、玔粋に盎感に基づいおおり、厳密に蚌明したかったのです。 結局のずころ理論。



䜕かを蚌明するためには、蚀語の圢匏的な意味論が必芁です。 miniKanrenの操䜜䞊のセマンティクスに぀いお説明したした。 これは、実際の蚀語実装の簡略化され数孊化されたバヌゞョンです。 非垞に限られたしたがっお䜿いやすいバヌゞョンを䜿甚し、プログラムの最終実行のみを指定できたす怜玢は最終的なものでなければなりたせん。 しかし、私たちの目的にずっお、これはたさに必芁なものです。



基準を蚌明するために、補題が最初に定匏化されたす。より䞀般的な状態からのプログラム実行はより長く機胜したす。 正匏セマンティクスの出力ツリヌの高さは倧きくなりたす。 これは垰玍法によっお蚌明されたすが、ステヌトメントは非垞に慎重に䞀般化する必芁がありたす。そうしないず、垰玍法の仮説が十分に匷くなりたせん。 この補題から、プログラムの実行䞭に基準が機胜した堎合、出力ツリヌはそれ以䞊の高さのサブツリヌを持぀こずになりたす。 垰玍的に䞎えられたセマンティクスではすべおのツリヌが有限であるため、これは矛盟をもたらしたす。 したがっお、私たちのセマンティクスでは、このプログラムの実行は衚珟できないため、このプログラムでの怜玢は終了したせん。



提案された方法は保守的です。すべおがすでに完党に悪く、悪化させるこずは䞍可胜であるず確信した堎合にのみ、䜕かを倉曎したす。したがっお、プログラムの完了に関しおは䜕も壊したせん。



メむンプルヌフには倚くの詳现が含たれおいるため、 Coqに曞き蟌むこずで正匏に怜蚌する必芁がありたした。 しかし、これは技術的に非垞に困難であるこずが刀明したため、私たちは熱意を冷やし、奉仕掻動でのみ自動怜蚌に真剣に取り組みたした。



転蚘



䜜業の途䞭で、孊生研究コンペティションのICFP-2017のポスタヌセッションでこの研究を発衚したした。 そこで、蚀語の䜜成者であるりィル・バヌドずダニ゚ル・フリヌドマンに䌚いたしたが、圌らはそれが有意矩であり、より詳现に調べる必芁があるず蚀いたした。 ちなみに、りィルは䞀般的にJetBrains Researchの研究宀ず友達です。 miniKanrenに関するすべおの研究は、2015幎にサンクトペテルブルクでリレヌショナルプログラミングのサマヌスクヌルを開催したずきに始たりたした。



1幎埌、䜜業を​​ほが完党な圢匏にし、2018幎の宣蚀型プログラミングの原則ず実践で蚘事を発衚したした。



倧孊院で䜕をしたすか



私たちは、miniKanrenの正匏なセマンティクスず、そのすべおのプロパティの厳密な蚌明に匕き続き取り組みたいず考えたした。 文献では、通垞、プロパティ倚くの堎合、明らかではないは、䟋を䜿甚しお単玔に仮定および実蚌されおいたすが、䜕も蚌明しおいたせん。 たずえば、リレヌショナルプログラミングのメむンブックは質問ず回答のリストであり、それぞれが特定のコヌドに専念しおいたす。 むンタヌリヌブ怜玢の完党性のステヌトメントこれは、暙準Prologに察するminiKanrenの最も重芁な利点の1぀でさえ、厳密な衚珟を芋぀けるこずは䞍可胜です。 あなたはそのように生きるこずはできたせん、私たちは決めたした、そしお、りィルから祝犏を受けお、私たちは仕事に取り掛かりたす。



前の段階で開発したセマンティクスには重倧な制限があったこずを思い出させおください有限怜玢のプログラムのみが蚘述されたした。 miniKanrenでは、無限の数の回答をリストできるため、実行䞭のプログラムにも関心がありたす。 したがっお、よりクヌルなセマンティクスが必芁でした。



プログラミング蚀語のセマンティクスを定矩するさたざたな暙準的な方法がありたすが、そのうちの1぀を遞択し、特定のケヌスに適合させるだけで枈みたした。 セマンティクスをラベル付き遷移システムずしお説明したした-怜玢プロセスの可胜な状態ずこれらの状態間の遷移のセットで、いく぀かはマヌクされおいたす。぀たり、怜玢のこの段階で別の答えが芋぀かりたした。 したがっお、特定のプログラムの実行は、そのような遷移のシヌケンスによっお決定されたす。 これらのシヌケンスは、プログラムの終了ず完了を同時に蚘述しない有限最終状態になるたたぱンドレスにするこずができたす。 そのようなオブゞェクトを数孊的に完党に指定するには、共垰玍的定矩を䜿甚する必芁がありたす。



䞊蚘のセマンティクスは操䜜可胜です -これは、怜玢の実際の実装を反映しおいたす。それに加えお、蚀語プログラムおよび構成の䞀郚の数孊的オブゞェクトを自然なプログラムに関連付ける衚瀺的セマンティクスも䜿甚したすたずえば、プログラム内の関係は甚語セット䞊の関係ず芋なされ、接続詞は関係の亀差点などです。このようなセマンティクスを定矩する暙準的な方法は、最小の゚ルブランモデルず呌ばれ、miniKanrenの堎合は既に以前に行われおいたす私たちの研究宀でも。



その埌、蚀語の怜玢の完党性、および正確性は、これら2぀のセマンティクスの同等性ずしお定匏化できたす。぀たり、特定のプログラムに察する回答のセットの䞀臎です。私たちはそれを蚌明するこずができたした。おもしろいそしお少し悲しいが、異なるパラメヌタヌでいく぀かの入れ子になった誘導を䜿甚しお、共誘導なしでやったこずです。

圓然の結果ずしお、いく぀かの有甚な蚀語倉換埗られた゜リュヌションのセットに関しおの正確性も取埗したす倉換が明らかに察応する数孊的オブゞェクトを倉曎しない堎合、䟋えば、接続詞の䞊べ替え、たたは分配接続詞たたは遞蚀の䜿甚、怜玢結果は倉曎されたせん。



ここで、セマンティクスを䜿甚しお、蚀語のその他の有甚なプロパティ、たずえば、完党性/分岐性の基準、たたは远加の蚀語構成の正確性を蚌明したいず考えおいたす。



たた、Coqを䜿甚した圢匏化の厳密な説明に぀いおも詳しく調べたした。倚くのさたざたな困難を克服し、倚倧な努力を泚いだ結果、蚀語の操䜜䞊のセマンティクスを蚭定し、いく぀かの蚌拠を実斜するこずができたした。Qed。」私たちは自分自身ぞの信仰を倱いたせん。



All Articles