# 5. Report contents / Зміст звіту The report is submitted together with the source code. It must contain the following sections. 1. **Title block** — course, laboratory work number and title, student's name and group, date. 2. **Objective** — a short statement of the goal of the work (see [1purpose.md](1purpose.md)). 3. **Brief theory** — ordered pairs, the Cartesian product $A \times B$, and the definition of a binary relation as a subset of $A \times B$, in your own words using standard relation notation (see [Lecture 3 — Relations](../../Lectures/CDM-L03.md)). 4. **Chosen representation** — how an ordered pair and a product/relation are stored without built-in set/tuple helpers, and how components are compared. 5. **Implementation** — the source code of every implemented function, with brief comments. State the programming language used. 6. **Testing** — for each function, a table of test cases and results. Include the examples from [4task.md](4task.md) **and** your own edge cases: an empty factor ($A \times \varnothing$), the size check $|A \times B| = |A|\cdot|B|$, a relation that is **valid** and one that is **invalid**, and a predicate that selects no pairs. 7. **Achieved tier** — state the highest tier you completed and which functions it covers (see the grading bands in [4task.md](4task.md)). 8. **Complexity** — the time complexity of `cartesianProduct`, `isRelationValid`, `findRelations`, and `filteredCartesianProduct`, with one sentence on how a hash-based membership test would affect validation. 9. **Conclusions** — what was implemented, the difficulties encountered, and what you learned. **Submission requirements.** The source files must compile/run and reproduce the example outputs of [4task.md](4task.md).