TÓM TẮT
- 1 1. Giới thiệu chung về sơ đồ Hasse
- 2 2. Các bước cơ bản để vẽ sơ đồ Hasse
- 3 3. Ví dụ thực tế: Vẽ sơ đồ Hasse cho một tập con
- 4 4. Các trường hợp phức tạp hơn
- 5 5. Công cụ hỗ trợ vẽ sơ đồ Hasse
- 6 6. Các lưu ý thường gặp khi vẽ sơ đồ Hasse
- 7 7. Ứng dụng thực tiễn của sơ đồ Hasse
- 8 8. Thực hành: Bài tập tự luyện
- 9 9. Kết luận
1. Giới thiệu chung về sơ đồ Hasse
Sơ đồ Hasse (tiếng Anh: Hasse diagram) là một công cụ trực quan quan trọng trong lý thuyết tập phần (order theory) và các nhánh toán học liên quan như đại số, logic, lý thuyết lattice, và thậm chí cả trong khoa học máy tính. Nó cho phép chúng ta biểu diễn một quan hệ thứ tự một cách trực quan, giúp nhận diện nhanh các mối quan hệ “phủ định” (cover) giữa các phần tử mà không cần vẽ đầy đủ các cung của đồ thị.
1.1. Định nghĩa sơ đồ Hasse
Cho một tập hợp (P) và một quan hệ thứ tự một phần (\leq) trên (P). Sơ đồ Hasse là một đồ thị vô hướng trong đó:
- Mỗi nút tương ứng với một phần tử của (P).
- Có một cạnh nối từ nút (a) tới nút (b) (với (a \neq b)) nếu và chỉ nếu (a \leq b) và không tồn tại phần tử (c) nào thỏa mãn (a < c < b). Khi đó, ta nói (b) phủ (a) (hay (b) là cover của (a)).
- Các nút được vẽ sao cho nếu (a \leq b) thì vị trí của (a) thấp hơn (hoặc bằng) vị trí của (b). Thông thường, trục y được dùng để thể hiện thứ tự “các lớp” (levels).
Sơ đồ Hasse loại bỏ các cạnh “trực tiếp” không cần thiết, do đó làm cho đồ thị gọn gàng, dễ đọc hơn so với việc vẽ toàn bộ các cặp ((a,b)) thỏa (\leq).
1.2. Lợi ích của việc vẽ sơ đồ Hasse
- Hiểu nhanh cấu trúc thứ tự: Khi nhìn vào sơ đồ, chúng ta có thể nhanh chóng nhận ra các phần tử tối tiểu, tối đa, các lớp trung gian, và các chuỗi (chains) dài nhất.
- Kiểm tra tính chất: Nhờ vào hình ảnh, việc kiểm tra tính chất như lattice (mỗi cặp có phần tử lớn nhất chung và phần tử nhỏ nhất chung) trở nên dễ dàng.
- Ứng dụng thực tế: Sơ đồ Hasse xuất hiện trong việc thiết kế cơ sở dữ liệu (điều kiện phụ thuộc), phân tích quyền truy cập (lattice of security levels), và thậm chí trong các trò chơi logic.
2. Các bước cơ bản để vẽ sơ đồ Hasse

Có thể bạn quan tâm: Cách Vẽ Sơ Đồ Grant: Hướng Dẫn Chi Tiết Từ A Đến Z
2.1. Bước 1: Xác định tập hợp và quan hệ thứ tự
Trước hết, bạn cần có:
- Tập hợp (P): danh sách các phần tử (có thể là số, tập con, hoặc các đối tượng trừu tượng).
- Quan hệ (\leq): xác định rõ ràng cách phần tử so sánh với nhau. Ví dụ:
- Sắp xếp theo kích thước (subset inclusion: (\subseteq)).
- Sắp xếp theo chia hết (divisibility: (|)).
- Sắp xếp từ nhỏ tới lớn (≤ trên số nguyên).
Nếu quan hệ chưa được định nghĩa, bạn phải định nghĩa nó một cách chính xác, vì mọi phần còn lại dựa trên quan hệ này.
2.2. Bước 2: Tìm các cặp “cover”
Một cặp ((a,b)) được gọi là cover nếu:
- (a < b) (nghĩa là (a \leq b) và (a \neq b)).
- Không tồn tại phần tử (c) sao cho (a < c < b).
Để tìm các cặp cover, thực hiện:
- Liệt kê toàn bộ các cặp ((a,b)) thỏa (\leq).
- Loại bỏ các cặp có “trung gian”. Đối với mỗi cặp ((a,b)), nếu tồn tại (c) sao cho (a < c < b), thì ((a,b)) không phải là cover.
Phương pháp thực tiễn:
- Sắp xếp các phần tử theo thứ tự tăng dần (hoặc theo lớp).
- Kiểm tra từng cặp liền kề trong danh sách đã sắp xếp. Nếu không có phần tử nào nằm giữa, thì chúng là cover.
2.3. Bước 3: Xác định các lớp (levels)
Mỗi phần tử được đặt ở một “cấp” (level) sao cho:
- Cấp 0 chứa các phần tử tối tiểu (không có phần tử nào nhỏ hơn chúng trong quan hệ).
- Cấp k+1 chứa các phần tử mà tất cả các phần tử phủ của chúng nằm trong các cấp (\leq k).
Cách tính:
- Bắt đầu từ các phần tử tối tiểu (các nút không có inbound edge). Gán chúng cấp 0.
- Lặp lại: với mỗi phần tử chưa gán cấp, nếu tất cả các phần tử phủ của nó đã có cấp, thì gán cấp mới bằng max(cấp của các phủ) + 1.
Quá trình này tạo ra một định hướng lên (upward direction) trong sơ đồ, giúp vẽ các nút ở các mức cao hơn.
2.4. Bước 4: Vẽ các nút và các cạnh
- Vẽ các nút: Đặt các nút của cùng một cấp trên cùng một hàng ngang (hoặc gần nhau).
- Vẽ các cạnh: Nối mỗi nút (a) tới các nút (b) mà (b) là cover của (a). Đảm bảo các cạnh luôn đi lên (từ cấp thấp tới cấp cao).
- Tránh giao nhau: Sắp xếp các nút sao cho các cạnh không cắt nhau quá nhiều. Có thể dùng phần mềm (Graphviz, TikZ, yEd, hoặc các công cụ online) để tự động bố trí.
2.5. Bước 5: Kiểm tra và tinh chỉnh

Có thể bạn quan tâm: Cách Vẽ Sơ Đồ Dupont: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Kiểm tra tính đầy đủ: Đảm bảo mỗi cặp cover đã được vẽ.
- Kiểm tra tính hợp lệ: Không có cạnh nào “rơi” ngược chiều (từ cao xuống thấp).
- Tinh chỉnh: Đặt lại vị trí các nút để đồ thị gọn gàng, dễ nhìn.
3. Ví dụ thực tế: Vẽ sơ đồ Hasse cho một tập con
3.1. Bài toán
Cho tập (S = {a, b, c}). Xây dựng sơ đồ Hasse cho tập các tập con của (S) với quan hệ (\subseteq) (bao gồm).
3.2. Bước 1: Xác định tập và quan hệ
- Tập các tập con (powerset) của (S) có (2^3 = 8) phần tử: (\emptyset, {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}).
- Quan hệ: (X \subseteq Y) nếu mọi phần tử của (X) đều thuộc (Y).
3.3. Bước 2: Tìm các cặp cover
- (\emptyset) là phủ của các tập con có đúng một phần tử: ({a}, {b}, {c}).
- Các tập có một phần tử là phủ của các tập có hai phần tử chứa chúng:
- ({a}) phủ ({a,b}, {a,c}).
- ({b}) phủ ({a,b}, {b,c}).
- ({c}) phủ ({a,c}, {b,c}).
- Các tập có hai phần tử là phủ của ({a,b,c}).
Không có cặp nào khác là cover vì luôn có một tập con trung gian.
3.4. Bước 3: Xác định các lớp
- Cấp 0: (\emptyset).
- Cấp 1: ({a}, {b}, {c}).
- Cấp 2: ({a,b}, {a,c}, {b,c}).
- Cấp 3: ({a,b,c}).
3.5. Bước 4: Vẽ

Có thể bạn quan tâm: Cách Vẽ Sơ Đồ Container: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Đặt (\emptyset) ở dưới cùng.
- Đặt ba nút cấp 1 trên một hàng ngang.
- Đặt ba nút cấp 2 trên hàng tiếp theo, sao cho mỗi nút cấp 2 nằm giữa hai nút cấp 1 mà nó phủ.
- Đặt ({a,b,c}) ở trên cùng.
Kết quả là một lattice hình tam giác, thường được gọi là “lattice của mặt lưới 3 chiều”.
3.6. Kiểm tra
- Mỗi nút có đúng các edge cover đã liệt kê.
- Các cạnh không cắt nhau (trừ các giao điểm tại các nút).
- Các cấp được sắp xếp đúng thứ tự.
4. Các trường hợp phức tạp hơn
4.1. Quan hệ chia hết (divisibility)
Cho tập (P = {1,2,3,4,6,8,12,24}) và quan hệ (a \mid b) (a chia hết cho b).
4.1.1. Tìm các cover
- 1 là phủ của 2 và 3.
- 2 là phủ của 4 và 6.
- 3 là phủ của 6.
- 4 là phủ của 8 và 12.
- 6 là phủ của 12 và 24.
- 8 là phủ của 24.
- 12 là phủ của 24.
4.1.2. Xác định cấp
- Cấp 0: 1
- Cấp 1: 2,3
- Cấp 2: 4,6
- Cấp 3: 8,12
- Cấp 4: 24
4.1.3. Vẽ
Kết quả là một cây “được rẽ” với một số nhánh hợp nhau ở các mức trung gian. Đồ thị này giúp nhận ra lattice nếu mỗi cặp có gcd và lcm trong tập.
4.2. Lattice không hoàn chỉnh
Một lattice yêu cầu mỗi cặp phần tử có phần tử lớn nhất chung (join) và phần tử nhỏ nhất chung (meet). Khi vẽ sơ đồ Hasse, bạn có thể kiểm tra tính chất này bằng cách:

Có thể bạn quan tâm: Cách Vẽ Sơ Đồ Cd (conceptual Diagram) Chi Tiết Từ A Đến Z
- Join của (a) và (b): Tìm nút thấp nhất (có cấp cao nhất) mà cả (a) và (b) đều có đường lên tới nó.
- Meet của (a) và (b): Tìm nút cao nhất (có cấp thấp nhất) mà cả (a) và (b) đều có đường xuống tới nó.
Nếu một cặp không có join hoặc meet, sơ đồ sẽ không phải là lattice.
5. Công cụ hỗ trợ vẽ sơ đồ Hasse
| Công cụ | Loại | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Graphviz (dot) | Dòng lệnh / thư viện | Tự động bố trí, hỗ trợ nhiều định dạng | Cần viết file .dot, không trực quan khi chỉnh sửa |
| TikZ (LaTeX) | Gói vẽ trong LaTeX | Độ chính xác cao, tích hợp trong tài liệu khoa học | Cú pháp phức tạp, thời gian học dài |
| yEd Graph Editor | Ứng dụng desktop | Kéo thả, tự động layout “Hierarchical” | Không mã nguồn mở |
| Gephi | Phân tích mạng | Tương tác, hỗ trợ lớn | Quá mạnh cho sơ đồ Hasse đơn giản |
| Online Hasse Diagram Generator | Web | Nhanh, không cài đặt | Tính năng giới hạn, không tùy biến sâu |
5.1. Hướng dẫn nhanh với Graphviz
- Tạo file
hasse.dot:
“`dot
digraph G {
rankdir=BT; // Bottom to top
node shape=circle;
// Nodes
“” label=”∅”;
a label=”{a}”;
b label=”{b}”;
c label=”{c}”;
ab label=”{a,b}”;
ac label=”{a,c}”;
bc label=”{b,c}”;
abc label=”{a,b,c}”;
// Edges (cover) "" -> a; "" -> b; "" -> c; a -> ab; a -> ac; b -> ab; b -> bc; c -> ac; c -> bc; ab -> abc; ac -> abc; bc -> abc;
}
“`
- Chạy lệnh:
dot -Tpng hasse.dot -o hasse.png. - Mở
hasse.pngđể xem sơ đồ.
5.2. Vẽ bằng TikZ (LaTeX)
\begin{tikzpicture}node distance=1.5cm, every node/.style={circle,draw,inner sep=2pt}
\node (empty) {$\emptyset$};
\node (a) above left of=empty {$\{a\}$};
\node (b) above of=empty {$\{b\}$};
\node (c) above right of=empty {$\{c\}$};
\node (ab) above left of=b {$\{a,b\}$};
\node (ac) above right of=a {$\{a,c\}$};
\node (bc) above right of=b {$\{b,c\}$};
\node (abc) above of=bc {$\{a,b,c\}$}; \draw (empty) -- (a);
\draw (empty) -- (b);
\draw (empty) -- (c);
\draw (a) -- (ab);
\draw (a) -- (ac);
\draw (b) -- (ab);
\draw (b) -- (bc);
\draw (c) -- (ac);
\draw (c) -- (bc);
\draw (ab) -- (abc);
\draw (ac) -- (abc);
\draw (bc) -- (abc);
\end{tikzpicture}
Kết quả là một sơ đồ Hasse gọn gàng, thích hợp cho các bài báo khoa học.
6. Các lưu ý thường gặp khi vẽ sơ đồ Hasse
- Nhầm lẫn giữa cover và quan hệ chung
- Đừng vẽ mọi cặp ((a,b)) thoả (\leq); chỉ vẽ các cặp cover.
- Quên cấp tối tiểu hoặc tối đa
- Luôn kiểm tra xem có phần tử không có inbound (tối tiểu) hoặc outbound (tối đa) không.
- Cạnh chồng lên nhau
- Sắp xếp lại vị trí các nút để tránh giao nhau, đặc biệt trong các lattice lớn.
- Sai hướng
- Đảm bảo các cạnh luôn đi lên (đối với quan hệ (\leq)). Nếu vẽ ngược, người xem sẽ nhầm lẫn.
- Quên các phần tử trung gian
- Khi có nhiều phần tử ở cùng một cấp, hãy kiểm tra xem có phần tử nào “bị bỏ sót” ở cấp trung gian không.
7. Ứng dụng thực tiễn của sơ đồ Hasse
7.1. Trong lý thuyết lattice
- Lattice Boolean: Các tập con của một tập cho quan hệ (\subseteq). Sơ đồ Hasse giúp nhận ra các phép toán
∨(join) và∧(meet) là hợp và giao. - Lattice phân phối: Kiểm tra tính phân phối bằng cách quan sát các hình chữ nhật trong sơ đồ.
7.2. Trong an ninh thông tin

- Mô hình Bell-LaPadula: Các mức bảo mật (Top Secret, Secret, Confidential, Unclassified) tạo thành một lattice. Sơ đồ Hasse cho phép phân tích luồng thông tin và kiểm tra các quy tắc “no read up, no write down”.
7.3. Trong cơ sở dữ liệu
- Phụ thuộc hàm: Các tập phụ thuộc được sắp xếp thành lattice, giúp xác định các khóa tối thiểu và biểu đồ phụ thuộc.
7.4. Trong lập trình và kiểu dữ liệu
- Subtyping: Hệ thống kiểu (type system) của một ngôn ngữ lập trình thường tạo thành một lattice (ví dụ:
Object>Number>Integer). Sơ đồ Hasse giúp hình dung mối quan hệ kế thừa.
8. Thực hành: Bài tập tự luyện
- Bài 1: Cho tập (P = {1,2,3,4,5,6,12}) với quan hệ “chia hết”. Vẽ sơ đồ Hasse và xác định xem nó có phải là lattice không.
- Bài 2: Với tập các tập con của ({1,2,3,4}), vẽ sơ đồ Hasse và chỉ ra phần tử độc lập (atom) và coatom.
- Bài 3: Trong một hệ thống phân quyền (Low < Medium < High), thêm một mức “Super‑High” chỉ được một số người dùng có. Vẽ sơ đồ Hasse và giải thích cách join và meet hoạt động.
Sau khi hoàn thành, dùng Graphviz hoặc TikZ để kiểm tra kết quả.
9. Kết luận
Sơ đồ Hasse không chỉ là một công cụ minh họa đơn thuần mà còn là một công cụ phân tích mạnh mẽ giúp chúng ta nắm bắt cấu trúc thứ tự, kiểm tra tính chất lattice, và áp dụng vào nhiều lĩnh vực thực tiễn. Việc hiểu rõ cách xác định các cặp cover, phân lớp, và vẽ đúng hướng là nền tảng để tạo ra những sơ đồ chính xác và có giá trị.
Hãy thực hành thường xuyên với các ví dụ đa dạng – từ các tập con đơn giản tới các quan hệ chia hết phức tạp – để làm quen với quy trình và phát triển kỹ năng trực quan hoá quan hệ thứ tự. Khi đã thành thạo, bạn sẽ thấy sơ đồ Hasse trở thành “bản đồ” không thể thiếu trong hành trình khám phá thế giới trừu tượng của toán học và khoa học máy tính.
