2016-10-06 7 views
0

Z3モジュールを使用してZ3ソルバとインターフェイスする次のOCamlコードスニペットを考えてみましょう。コードは、2つの整数の引数を受け入れ、単一のコンストラクタTとZ3に新しいTPairデータ型を定義しようとします:Z3のOCamlライブラリがセグメント化エラーをスローする

open Z3                       
open Z3.SMT 
open Z3.Expr                      
open Z3.Symbol                     
open Z3.Datatype                     
open Z3.FuncDecl 
open Z3.Arithmetic 
open Z3.Arithmetic.Integer                  
open Z3.Quantifier 

let _ =                       
    let cfg = [("model", "true"); ("proof", "false")] in 
    let ctx = (mk_context cfg) in 
    let sym = Symbol.mk_string ctx in 
    let s_Int = mk_sort ctx in 
    (* (declare-datatypes() ((TPair (T Int Int))))*) 
    let s_T = mk_constructor_s ctx "T" (sym "isT") 
       [sym "left"; sym "right"]               
       [Some s_Int; Some s_Int] [0; 0] in            
    let s_TPair = mk_sort_s ctx "TPair" [s_T] in 
    let _::s_content::_ = Constructor.get_accessor_decls s_T in         
    let s_isT = Constructor.get_tester_decl s_T in             
    let solver = Solver.mk_solver ctx None in 
    begin 
     Printf.printf "***** CONTEXT ******\n";             
     print_string @@ Solver.to_string solver; 
     Printf.printf "\n*********************\n" 
    end 

get_tester_declget_accessor_declsの両方への呼び出しセグメンテーションフォールトをスローします。理由は何でしょうか?

+1

ライブラリ作成者に報告してください。 – camlspotter

+0

ここで与えられたサンプルソースコードは(警告付きで)コンパイルされ、うまく動作します。 OCamlは少しフレークです。正確にあなたが使っているバージョンとそのバージョンを教えてください。また、最新のZ3ソースコードを使用していることを確認し、ソースからコンパイルしてください。最後のバイナリリリース以降にいくつか修正されています。 –

答えて

1

純粋なOCamlで書かれたコードは、セグメンテーション違反を引き起こす可能性があります。これは、OCamlがメモリセーフな言語であるためです。この問題は、配管のどこかで、OCamlが基礎となるライブラリにバインドされている場所か、z3ライブラリ自体のいずれかにあります。

ライブラリ(またはバインディング)の作成者のみが、この問題のデバッグや修正をお手伝いします。ですので、the upstreamリポジトリに問題を作成してください。

+0

答えをありがとう。質問はZ3コミュニティを対象としているので、私はOCamlタグを削除しました。あなたがそれを再追加した理由は何ですか? –

+0

確かに、この質問は、タイトルと本文の両方に明示的にOCamlを明記しました。またOCamlコードも含まれていました。また、OPがOCamlやそのコードの問題であり、ライブラリではないと思うように見えます。だから私の仕事は、OCaml自体がそのような問題の理由ではないことを説明することだったので、問題の根本は他の場所に見えるべきです。私は将来、私の答えは、 "セグメンテーションフォールト+ ocaml"を検索する人に、問題がOCamlコード内にあってはならないと明示的に言って助けてくれることを願っています。 – ivg

関連する問題