Int *のZ3正規表現

OrenIshShalom

整数の特定のシーケンスに、ある整数が少なくとも2回(たとえば8回)含まれているというアサーションを書き込もうとしています。これが私が書いたものです:

(declare-const s (Seq Int))
(assert (seq.in.re s
    (re.++
        re.all
        (re.++
            (seq.to.re (seq.unit 8))
            (re.++
                re.all
                (re.++
                    (seq.to.re (seq.unit 8))
                    re.all))))))

実行しようとすると、次のエラーが発生します。

(error "line 11 column 11: Sort of function 're.++' does not match the declared type. Given domain: (RegEx (Seq Int)) (RegEx String) ")

だから私re.allは文字列に対してのみ定義されていると思いますか?すべての整数の正規表現を作成する方法はありますか?

エイリアス

SMTLib型システムはかなり弱く、re.all文字列regexpと他のシーケンスのregexpを区別できないため、見たときに混乱します。したがって、タイプエラーが発生します。

これは実際にはSMTLib標準で予想されています。http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdfのセクション3.6.4を参照してください。

解決策(標準で説明されている)は、次のように、as句を使用して明示的な型を指定することです。

(define-fun allInt () (RegEx (Seq Int)) (as re.all (RegEx (Seq Int))))

(declare-const s (Seq Int))
(assert (seq.in.re s
    (re.++
        allInt
        (re.++
            (seq.to.re (seq.unit 8))
            (re.++
                allInt
                (re.++
                    (seq.to.re (seq.unit 8))
                    allInt))))))

これは、システムが実際のタイプがどうあるべきかをコンテキストから理解することを期待する人々にとって一般的な落とし穴です。しかし、システムを単純に保つために、設計者は非常に単純な型システムを選びました。各用語は、コンテキスト情報なしで、それ自体で入力可能である必要があります。これが不可能なまれなケース(ユースケースなど)では、as入力について明示的にする手段として構文が提供されていました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Z3:int2bvの例外

分類Dev

z3正規表現の並べ替えが認識されない

分類Dev

通貨のみのfloatまたはintを識別する正規表現

分類Dev

正規表現:文字列とコロンの後にintを抽出します

分類Dev

PowerShellで[文字列]正規表現の置換を[int]追加する方法は?

分類Dev

intパターンをテストするための正規表現

分類Dev

INT。、EXT。、INT。/ EXT。などをキャプチャするための正規表現の構築

分類Dev

文字列をint、doubleで分割するJava正規表現

分類Dev

正規表現:intは逆参照できません

分類Dev

正規表現。すべてのintを検索し、doubleに置き換えます

分類Dev

Javascript正規表現を使用して文字列の末尾からintとfloatを削除する

分類Dev

正規表現:単語の一部ではない数値(int、float)を検索する

分類Dev

パターンからすべてのintまたはdecimalを取得するphp正規表現

分類Dev

正規表現を使用して文字列からいくつかのintを抽出します

分類Dev

文字列上のintとともに日付と時間をキャプチャする正規表現

分類Dev

URLからintをフィルタリングする正規表現

分類Dev

正規表現なしで文字列からintを解析しますか?

分類Dev

正規表現を使用してcharをintに変換します

分類Dev

DjangoURL正規表現がIntをキャプチャしていません

分類Dev

Javascriptテキストボックス検証正規表現-複数の整数(0 <= int <= 500)、単一の空白でのみ区切られます

分類Dev

正規表現を介して「ソースコード内の配列内の明示的なintアクセス」を見つける方法は?

分類Dev

int(* function)(int、int)とint * function(int、int)の違い

分類Dev

Python3正規表現の問題

分類Dev

数値3以上の正規表現

分類Dev

CakePHP 3 の正規表現検証

分類Dev

3 母音以上の正規表現文字列

分類Dev

z3pyで正規表現を連結する方法は?

分類Dev

jodaの新しいDateTimeに関する問題(int、int、int、int、int、int、int)

分類Dev

正規表現:3つの正規表現を組み合わせる

Related 関連記事

  1. 1

    Z3:int2bvの例外

  2. 2

    z3正規表現の並べ替えが認識されない

  3. 3

    通貨のみのfloatまたはintを識別する正規表現

  4. 4

    正規表現:文字列とコロンの後にintを抽出します

  5. 5

    PowerShellで[文字列]正規表現の置換を[int]追加する方法は?

  6. 6

    intパターンをテストするための正規表現

  7. 7

    INT。、EXT。、INT。/ EXT。などをキャプチャするための正規表現の構築

  8. 8

    文字列をint、doubleで分割するJava正規表現

  9. 9

    正規表現:intは逆参照できません

  10. 10

    正規表現。すべてのintを検索し、doubleに置き換えます

  11. 11

    Javascript正規表現を使用して文字列の末尾からintとfloatを削除する

  12. 12

    正規表現:単語の一部ではない数値(int、float)を検索する

  13. 13

    パターンからすべてのintまたはdecimalを取得するphp正規表現

  14. 14

    正規表現を使用して文字列からいくつかのintを抽出します

  15. 15

    文字列上のintとともに日付と時間をキャプチャする正規表現

  16. 16

    URLからintをフィルタリングする正規表現

  17. 17

    正規表現なしで文字列からintを解析しますか?

  18. 18

    正規表現を使用してcharをintに変換します

  19. 19

    DjangoURL正規表現がIntをキャプチャしていません

  20. 20

    Javascriptテキストボックス検証正規表現-複数の整数(0 <= int <= 500)、単一の空白でのみ区切られます

  21. 21

    正規表現を介して「ソースコード内の配列内の明示的なintアクセス」を見つける方法は?

  22. 22

    int(* function)(int、int)とint * function(int、int)の違い

  23. 23

    Python3正規表現の問題

  24. 24

    数値3以上の正規表現

  25. 25

    CakePHP 3 の正規表現検証

  26. 26

    3 母音以上の正規表現文字列

  27. 27

    z3pyで正規表現を連結する方法は?

  28. 28

    jodaの新しいDateTimeに関する問題(int、int、int、int、int、int、int)

  29. 29

    正規表現:3つの正規表現を組み合わせる

ホットタグ

アーカイブ