離散数学

ユーザーロールと権限のマッピングにおける関数の性質

情報システムにおけるユーザーの役割割り当てと、それに紐づくアクセス権限のマッピングを題材に、関数の概念(単射、全射、全単射、合成関数)を学びます。これにより、システムの設計や分析において、データ間の関係性を数学的に正確に表現し、その性質を理解する能力を養います。

関数

情報システムにおけるユーザーの役割割り当てと、それに紐づくアクセス権限のマッピングを題材に、関数の概念(単射、全射、全単射、合成関数)を学びます。これにより、システムの設計や分析において、データ間の関係性を数学的に正確に表現し、その性質を理解する能力を養います。

ユーザーロールと権限のマッピングにおける関数の性質

ある情報システムにおいて、ユーザー、ロール、そして各ロールに紐づくアクセス権限の管理を考えます。

以下の集合と関数を定義します。

  • ユーザーIDの集合 U = {user1, user2, user3, user4}
  • ロール(役割)IDの集合 R = {admin, editor, viewer}
  • アクセス権限セットの集合 P = {{read, write, delete}, {read, write}, {read}, {execute}}

ユーザーにロールを割り当てる関数 f: U → R は以下のように定義されます。

  • f(user1) = admin
  • f(user2) = editor
  • f(user3) = editor
  • f(user4) = viewer

ロールにアクセス権限セットを紐づける関数 g: R → P は以下のように定義されます。

  • g(admin) = {read, write, delete}
  • g(editor) = {read, write}
  • g(viewer) = {read}

以下の問いに答えなさい。

(1) 関数 f は単射、全射、全単射のいずれであるか、それぞれ理由を添えて答えなさい。 (2) 関数 g は単射、全射、全単射のいずれであるか、それぞれ理由を添えて答えなさい。 (3) 合成関数 g ∘ f : U → P を定義域の各要素について具体的に書き出し、それが単射、全射、全単射のいずれであるか、それぞれ理由を添えて答えなさい。 (4) 関数 g の逆関数 g⁻¹ は存在しますか?存在する場合、それを具体的に示し、存在しない場合、その理由を述べなさい。

解答を見る

(1) 関数 f: U → R について

  • 単射性: 単射ではありません。 理由: f(user2) = editor かつ f(user3) = editor であり、user2 ≠ user3 であるにもかかわらず、f(user2) = f(user3) となるためです。異なる定義域の要素が同じ終域の要素に写像されています。
  • 全射性: 全射です。 理由: 終域 R = {admin, editor, viewer} のすべての要素に対して、それぞれ対応する定義域 U の要素が存在します。 具体的には、admin には user1editor には user2 または user3viewer には user4 が対応しています。
  • 全単射性: 全単射ではありません。 理由: 単射ではないため、全単射でもありません。

(2) 関数 g: R → P について

  • 単射性: 単射です。 理由: R の異なる要素が、P の異なる要素に写像されています。 g(admin) = {read, write, delete} g(editor) = {read, write} g(viewer) = {read} すべての出力値が異なっています。
  • 全射性: 全射ではありません。 理由: 終域 P = {{read, write, delete}, {read, write}, {read}, {execute}} の要素 {execute} に対応する定義域 R の要素が存在しません。すなわち、{execute}g の値域に含まれません。
  • 全単射性: 全単射ではありません。 理由: 全射ではないため、全単射でもありません。

(3) 合成関数 g ∘ f : U → P について 合成関数 (g ∘ f)(x) = g(f(x)) は以下のようになります。

  • (g ∘ f)(user1) = g(f(user1)) = g(admin) = {read, write, delete}

  • (g ∘ f)(user2) = g(f(user2)) = g(editor) = {read, write}

  • (g ∘ f)(user3) = g(f(user3)) = g(editor) = {read, write}

  • (g ∘ f)(user4) = g(f(user4)) = g(viewer) = {read}

  • 単射性: 単射ではありません。 理由: (g ∘ f)(user2) = {read, write} かつ (g ∘ f)(user3) = {read, write} であり、user2 ≠ user3 であるにもかかわらず、(g ∘ f)(user2) = (g ∘ f)(user3) となるためです。

  • 全射性: 全射ではありません。 理由: 終域 P の要素 {execute} に対応する定義域 U の要素が存在しません。合成関数の値域は {{read, write, delete}, {read, write}, {read}} となり、P と一致しません。

  • 全単射性: 全単射ではありません。 理由: 単射でも全射でもないため、全単射でもありません。

(4) 関数 g の逆関数 g⁻¹ は存在しますか? 関数 g の逆関数 g⁻¹存在しません

理由: 逆関数が存在するためには、元の関数が全単射である必要があります。関数 g は(2)で示したように単射ではありましたが、全射ではありませんでした。g の終域 P の要素 {execute}g の値域に含まれないため、g⁻¹({execute}) を定義することができません。 (もし g の終域を g の値域である {{read, write, delete}, {read, write}, {read}} に制限すれば、その関数は全単射となり逆関数が存在しますが、元の定義 g: R → P のままでは存在しません。)