## Asymptotic Equivalence Classes (Big-O)

The equivalence relation definition given in the task is asking you to find functions that grow at the exact same rate (also known as Big-Theta $Theta$):

$f asymp g <==> f in O(g) and g in O(f)$

Notation of $f in O(g)$ means "function $f$ doesn't grow faster than $g$"

###  The "Dominant Term" Rule
To find which class a function belongs to, simplify it to its core growth rate:
1.  **Drop all lower-order terms:** In $n^3 + n^2$, drop the $n^2$.
2.  **Drop all constant multipliers:** $5n^2$ and $1000n^2$ both become just $n^2$.
3.  **Identify the highest rank:** Factorials ($n!$) > Exponentials ($2^n$, $e^n$) > Polynomials ($n^3$, $n^2$) > Linear ($n$) > Logarithmic ($log n$) > Constant ($1$).

## Euclidian Algorithm
Purpose is to find the **GCD** (Greatest Common Divisor).

### Core Rule
Fill out this formula:
$$"Dividend" = ("Quotient" * "Divisor") + "Remainder"$$
1. **Divide** the bigger number by the smaller one
2. **How many times** does it fit -> $"Quotient"$
3. Find out **whats leftover** -> $"Remainder"$
4. **Shift to left** and repeat ($"Old Divisor" -> "Dividend"$, $"Remainder" -> "Divisor"$)

Result is the last $"Remainder"$ that is not $0$.

### Bezout Coefficients
**Goal:** find a $x$ and $y$ so that $"Divident" * x + "Divisor" * y = gcd("Dividend", "Divisor")$

1. **Rewrite Euclid (above) equations** to solve for remainder ($"Remainder" = "Old Remainder" - "Dividend" * "Divisor"$)
2.  **Substitute remainders** -> 
## Inclusion-Exclusion Principle
 Principle that dictates that when combining / overlapping sets, you have to make sure to not include elements that occur in multiple sets multiple times.

### Example:
How many integers between $1$ and $10^6$ are of the form $x^2$ or $x^5$ for some $x in NN$?
#### How many $x^2$?
$sqrt(10^6) = 10^3 = 1.000$
#### How many $x^5$?
By estimation:
$$
&15^5 = 759,375 && "--- in the range / below" 10^6 \
&16^5 = 1,048,576 && "--- outside the range / above" 10^6 \
&=> 15 "numbers in the form "x^5"exist" &&
$$
> [!warning]
> Now, we can't add $1,000$ and $15$, since there are numbers that match both, so we need to subtract these duplicates.

#### How many $x^2$ and $x^5$ / $x^10$?
$$
& 3^10 = 59,049 \
& 4^10 = 1,048,576 \
& => 3 "numbers that are both" x^2 "and" x^5 "exist"
$$

#### Final calculation:
Formula: $"Elements that are" x^2 + "Elements that are" x^5 - "Elements that are both"$
$==> 1,000 + 15 - 3 = 1,012$

### For two sets
$|"Total possibilities"| - |"Avoid 1"| - |"Avoid 2"| + |"Avoid Both"|$
Where 
- $"Avoid 1"$ are all elements *not matching* condition 1
- $"Avoid 2"$ are all elements *not matching* condition 2
- $"Avoid Both"$ are all elements *not matching* condition 1 **and** 2

## Type of Task: Boolean Lattice
Find the amount of upper bounds in ${0, 1}^5$ for the set of vectors $S = {x, y, z}$
$$
& x = (0, 1, 0, 0, 0) \
& y = (0, 0, 1, 0, 1) \
& z = (0, 1, 1, 0, 0) \
$$
> [!INFO]
> Method used is called **All-Zero Column Method**

We look for columns that have $0$'s in all three vectors: Column $1$ and $4$, that's $2$ columns, so we define $k = 2$.
To get our result we calculate $2^k$ since there are only two possible states for each value $(0, 1)$:
$2^2 = 4$.
So we have **4** upper bounds in total.

> [!INFO]
> For the amount of lower bounds we'd check for all-ones columns

A function takes in an element from its **domain**, transforms it in someway and outputs that transformed element, which is part of the **co-domain**.
Every element of the **domain** must map to a value in the **co-domain**, all values of the **co-domain** that are mapped to form the functions **image**.
A function must be **deterministic** - one input can only map to a single output.

## Notation
General function notation: $f: X -> Y$

> [!INFO]
> $f$: name of the function
> $X$: Domain
> $Y$: Co-domain
> $f(x)$: Image of $f$
> $X$, $f(x)$ and $Y$ are [[Set Theory | Set]]

For any $x in X$ the output $f(x)$ is an element of $Y$.

## Mapping Properties
### Injectivity
A function is _injective_ if every element in $y in f(x)$ has _at most_ one matching $x in X$.
- $forall y in Y,exists excl x in X : f(x) = y$
### Surjectivity
A function is _surjective_ if every element $y in Y$ has _at minimum_ one matching $x in X$
- $forall y in Y, exists x in X : f(x) = y$

### Bijectivity
A function is _bijective_ if every element $y in Y$ has _exactly_ one matching $x in X$ (it is _injective_ and _surjective_)
- $forall y in Y, exists excl x in X : f(x) = y$

## Operators
| Operation         | Explanation                          | Notation  |
| ----------------- | ------------------------------------ | --------- |
| **and**<br>       | Both $p$ and $q$ must be true       | $p and q$ |
| **or** | Either $p$ or $q$ (or both) are true| $p or q$  |
| **not** | Negates the statement               | $not p$   |
| **Implication** | If $p$ then $q$                     | $=>$      |
| **Biconditional** | $p$ if and _only_ if $q$            | $<=>$     |
| **xor** | Either $p$ or $q$ but not both      | $xor$     |
### Implied Operators
| Operation | Explanion                               | Notation       |
| --------- | --------------------------------------- | -------------- |
| **nand** | $p$ and $q$ are not both true          | $not(p and q)$ |
| **nor** | neither of $p$ and $q$ are true        | $not(p or q)$  |
| **xnor** | $p$ and $q$ are both false or both true| $not xor$      |

## Types of Relations

| Relation         | Explanation                                                                                                           | Example                   |
| ---------------- | :-------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| *transitive*<br> | "chain reaction", a information about $a$ in relation to $c$ can be inferred from the relations $a -> b$ and $b -> c$ | $a < b, b < c => a < c$   |
| *reflexive* | every element is related to itself with the given relation                                                           | $a <= a, 5 = 5$           |
| *anti-reflexive* | every element is *NOT* related to itself in the given relation                                                       | $a < a$                   |
| *symmetric* | the given relation work both ways                                                                                    | $a = b => b = a$          |
| *antisymmetric* | the given relation only works both ways if $a$ and $b$ are the same                                                  | $a <= b, b <= a => a = b$ |

## Equivalence Relations
A relation $R$ is called _equivalence relation_ when it is _transitive, reflexive and symmetric_.

### Example:
**Question:** How many equivalence classes are there for the given equivalence relation?
$$
& ~ "on" {0, 1, 2, 3}^(2) \
& "defined by" (x_1, y_1) ~ (x_2, y_2) <==> x_1 + y_1 = x_2 + y_2
$$
> [!INFO]
> Meaning:
> The pairs $(x_1, y_1)$ and $(x_2, y_2)$ are equivalent to each other when the components of the pair added up have the same result.

Solving:
- Smallest possible sum: $(0 + 0) = 0$
- Biggest possible sum: $(3 + 3) = 6$
- All possible sums: $0, 1, 2, 3, 4, 5, 6$

Each possible sum creates it's own equivalence class. So there are $7$ equivalence classes.

> [!NOTE]
> All equivalence classes:
> $[0]_(~) = {(0, 0)}$
> $[1]_(~) = {(0, 1), (1, 0)}$
> $[2]_(~) = {(0, 2), (1, 1), (2, 0)}$
>$[3]_(~) = {(0, 3), (1, 2), (2, 1), (3, 0)}$
>$[4]_(~) = {(1, 3), (2, 2), (3, 1)}$
> $[5]_(~) = {(2, 3), (3, 2)}$
> $[6]_(~) = {(3, 3)}$

## Binary Relation
A binary relation is a relation $R$ between _exactly two_ elements $a in R$ and $b in R$. An example for a binary relation is $a <= b$

## Converse Relation
$C^top$ or $C^(-1)$ is the relation that occurs if the elements of a _binary relation_ are switched.

## Composition of Relations - Example
$$
"Compute" Q^top compose R "with:"\
Q = {(2, 2), (3, 3), (2, 1)} \
R = {(1, 2), (3, 3), (3, 1)} \
$$
### 1. Apply converse to $Q$:
$$
Q^top = {(2, 2), (3, 3), (1, 2)}
$$
### 2. Perform Composition:
Look at each pair in $R$, check if $Q^top$ has a pair starting with se second element in that pair:

$$
(1, 2) -> (2, 2) => (1, 2) \
(3, 3) -> (3, 3) => (3, 3) \
(3, 1) -> (1, 2) => (3, 2)
$$
### 3. Result:
$$Q^top compose R = {(1, 2), (3, 2), (3, 3)}$$

## Orders
An **Order** is a mathematical way to sort, rank or compare elements within a set, where some elements come "before" and "after" others.

A _binary relation_ is called an order if it is...
- [?] a *reflexive relation*
- [?] a *antisymmetric relation*
- [?] a *transitive relation*

A set is a collection of _unordered_ elements.
A set cannot contain duplicates.
## Notation
### Set Notation
Declaration of a set $A$ with elements $a$, $b$, $c$:
$$A := {a, b, c}$$
### Cardinality
Amount of Elements in a set $A$
Notation: $|A|$
$$
A := {1, 2, 3, 4} \
|A| = 4
$$
### Well-Known Sets
- Empty Set: $emptyset = {}$
- Natural Numbers: $N = {1, 2, 3, ...}$
- Integers: $ZZ = {-2, -1, 0, 1, 2}$
- Rational Numbers: $QQ = {1/2, 22/7 }$
- Real Numbers: $RR = {1, pi, sqrt(2)}$
- Complex Numbers: $CC = {i, pi, 1, sqrt(-1)}$

### Set-Builder Notation
Common form of notation to create sets without explicitly specifying elements.
$$
A := {x in N | 0 <= x <= 5} \
A = {1, 2, 3, 4, 5}
$$
### Member of
Denote whether $x$ is an element of the set $A$
Notation: $x in A$
Negation: $x in.not A$

### Subsets
| Type                     | Explanation                                                            | Notation            |
| ------------------------ | ---------------------------------------------------------------------- | ------------------- |
| **Subset** | Every element of $A$ is in $B$                                         | $A subset B$        |
| **Subset or equal to** | Every element of $A$ is in $B$, or they are the exactly same set       | $A subset.eq B$     |
| **Proper subset** | Every element of $A$ is in $B$, but $A$ is definitely smaller than $B$ | $A subset.sq B$<br> |
| **Superset**<br>         | $A$ contains everything that is in $B$                                 | $A supset B$        |
| **Superset or equal to** | $A$ contains everything that is in $B$, or they are identical          | $A supset.eq B$     |

## Operations
### Union
Notation: $A union B$
Definition: all elements from both sets _without adding duplicates_
$$A := {1, 2, 3}\ B := {3, 4, 5}\ A union B = {1, 2, 3, 4, 5}$$
### Intersection
Notation:$A inter B$
Definition: all elements _contained in both sets_
$$
A := {1, 2, 3} \
B := {2, 3, 4} \
A inter B = {2, 3}
$$
### Difference
Notation: $A backslash B$
Definition: all elements _in $A$ that are not in $B$_
$$
A := {1, 2, 3} \
B := {3, 4, 5} \
A backslash B = {1, 2}
$$ 
### Symmetric Difference
Notation: $A Delta B$
Definition: all elements _only in $A$ or only in $B$_
$$
A := {1, 2, 3} \
B := {2, 3, 4} \
A Delta B = {1, 4}
$$
### Cartesian Product
Notation: $A times B$
Definition: all pairs of all elements in $A$ and $B$
$$
A := {1, 2} \
B := {3, 4, 5} \
A times B = {(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)}
$$
### Powerset
Notation: $cal(P)(A)$
Definition: all possible _Subsets of A_
$$
A := {1, 2, 3} \
cal(P)(A) = {emptyset, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}
