4 つの並べ替え (タスク、ロール、ユーザー、および実行) を作成しました。最後のものは 2 つのパラメーターを受け取ります。次に、Run の 1 つを含め、それぞれの楽しみを宣言し、2 つのパラメーターを受け取る P を呼び出して、Run の「インスタンス」を作成します。 . 次に、ユーザーと役割の「関係」(Privs) を含む 2 つの配列と、役割とタスクの「関係」(役割) を含むもう 1 つの配列を作成しました。この 2 つの配列を使用して、ユーザー u を検索するときに Privs で役割 r を持っているかどうか、および Roles で役割 r を検索するときにタスク t を持っているかどうかをアサートします。これまでは、次のように別々の行でこれを行うことができました。
(declare-sort Task)
(declare-sort Role)
(declare-sort User)
(declare-sort Run 2)
(define-sort P (User Role) (Run User Role))
(declare-fun t () Task)
(declare-fun r () Role)
(declare-fun u () User)
(declare-const Privs (Array User Role))
(declare-const Roles (Array Role Task))
(assert (= (select Privs u) r))
(assert (= (select Roles r) t))
しかし今、私は Run (ユーザー、ロールのペア) を受け取り、関数内で同じことをアサートする楽しみを作ろうとしていますが、P のすべてのユーザーとそのすべてのロールに対してです。これは、実行ソート変数を関数に渡すことによって実行できますか??..内部の要素(ユーザー、ロール)にアクセスするために??