Compare commits
14 Commits
b94eef4848
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
932b0f13a7 | ||
|
|
60da9d6543 | ||
|
|
d6bc8375ce | ||
|
|
96f5304400 | ||
|
|
713d6e14e2 | ||
|
|
9bf031e870 | ||
|
|
149b151945 | ||
|
|
a5ea6f86a7 | ||
|
|
68e4b83aa1 | ||
|
|
9ee7805a0f | ||
|
|
f3f57cbefb | ||
|
|
461135ee9d | ||
|
|
0e0ca39f0a | ||
|
|
87a5182ac6 |
430
content/CSE4303/CSE4303_L17.md
Normal file
430
content/CSE4303/CSE4303_L17.md
Normal file
@@ -0,0 +1,430 @@
|
||||
# CSE4303 Introduction to Computer Security (Lecture 17)
|
||||
|
||||
> Due to lack of my attention, this lecture note is generated by AI to create continuations of the previous lecture note. I kept this warning because the note was created by AI.
|
||||
|
||||
#### Software security
|
||||
|
||||
### Administrative notes
|
||||
|
||||
#### Project details
|
||||
|
||||
- Project plan
|
||||
- Thursday, `4/9` at the end of class
|
||||
- `5%`
|
||||
- Written document and presentation recording
|
||||
- Thursday, `4/30` at `11:30 AM`
|
||||
- `15%`
|
||||
- View peer presentations and provide feedback
|
||||
- Wednesday, `5/6` at `11:59 PM`
|
||||
- `5%`
|
||||
|
||||
#### Upcoming schedule
|
||||
|
||||
- This week (`3/20`)
|
||||
- software security lecture
|
||||
- studio
|
||||
- some time for studio on Tuesday
|
||||
- Next week (`4/6`)
|
||||
- fuzzing
|
||||
- some time to discuss project ideas
|
||||
- `4/13`
|
||||
- Web security
|
||||
- `4/20`
|
||||
- Privacy and ethics overview
|
||||
- time to work on projects
|
||||
- course wrap-up
|
||||
|
||||
### Overview
|
||||
|
||||
#### Outline
|
||||
|
||||
- Context
|
||||
- Prominent software vulnerabilities and exploits
|
||||
- Buffer overflows
|
||||
- Background: C code, compilation, memory layout, execution
|
||||
- Baseline exploit
|
||||
- Challenges
|
||||
- Defenses, countermeasures, counter-countermeasures
|
||||
|
||||
Sources:
|
||||
- SEED lab book
|
||||
- Gilbert/Tamassia book
|
||||
- Slides from Bryant/O'Hallaron (CMU), Dan Boneh (Stanford), Michael Hicks (UMD)
|
||||
|
||||
### Context
|
||||
|
||||
#### Context: computing stack (informal)
|
||||
|
||||
| Layer | Example |
|
||||
| --- | --- |
|
||||
| Application | web server, standalone app |
|
||||
| Compiler / assembler | `gcc`, `clang` |
|
||||
| OS: syscalls | `execve()`, `setuid()`, `write()`, `open()`, `fork()` |
|
||||
| OS: processes, mem layout | Linux virtual memory layout |
|
||||
| Architecture (ISA, execution) | x86, x86_64, ARM |
|
||||
| Hardware | Intel Sky Lake processor |
|
||||
|
||||
- User control is strongest near the application / compiler level.
|
||||
- System control becomes more important as we move down toward OS, architecture, and hardware.
|
||||
|
||||
### Prominent software vulnerabilities and exploits
|
||||
|
||||
#### Software security: categories
|
||||
|
||||
- Race conditions
|
||||
- Privilege escalation
|
||||
- Path traversal
|
||||
- Environment variable modification
|
||||
- Language-specific vulnerabilities
|
||||
- Format string attack
|
||||
- Buffer overflows
|
||||
|
||||
#### Buffer Overflows (BoFs)
|
||||
|
||||
- A buffer overflow is a bug that affects low-level code, typically in C and C++, with significant security implications.
|
||||
- Normally, a program with this bug will simply crash.
|
||||
- But an attacker can alter the situations that cause the program to do much worse.
|
||||
- Steal private information
|
||||
- e.g. Heartbleed
|
||||
- Corrupt valuable information
|
||||
- Run code of the attacker's choice
|
||||
|
||||
#### Application behavior
|
||||
|
||||
- Slide contains a figure only.
|
||||
- Intended point: normal application behavior can become attacker-controlled if input handling is unsafe.
|
||||
|
||||
#### BoFs: why do we care?
|
||||
|
||||
- Reference from slide: [IEEE Spectrum top programming languages 2025](https://spectrum.ieee.org/top-programming-languages-2025)
|
||||
|
||||
#### Critical systems in C/C++
|
||||
|
||||
- Most OS kernels and utilities
|
||||
- `fingerd`
|
||||
- X windows server
|
||||
- shell
|
||||
- Many high-performance servers
|
||||
- Microsoft IIS
|
||||
- Apache `httpd`
|
||||
- `nginx`
|
||||
- Microsoft SQL Server
|
||||
- MySQL
|
||||
- `redis`
|
||||
- `memcached`
|
||||
- Many embedded systems
|
||||
- Mars rover
|
||||
- industrial control systems
|
||||
- automobiles
|
||||
|
||||
A successful attack on these systems can be particularly dangerous.
|
||||
|
||||
#### Morris Worm
|
||||
|
||||
- Slide contains a figure / historical reference only.
|
||||
- It is included as an example of how memory-corruption vulnerabilities mattered in practice.
|
||||
|
||||
#### Why do we still care?
|
||||
|
||||
- The slide references the NVD search page: [NVD vulnerability search](https://nvd.nist.gov/vuln/search)
|
||||
- Why the drop?
|
||||
- Memory-safe languages
|
||||
- Rust
|
||||
- Go
|
||||
- Stronger defenses
|
||||
- Fuzzing
|
||||
- find bugs before release
|
||||
- Change in development practices
|
||||
- code review
|
||||
- static analysis tools
|
||||
- related engineering improvements
|
||||
|
||||
#### MITRE Top 25 2025
|
||||
|
||||
- Reference from slide: [MITRE CWE Top 25](http://cwe.mitre.org/top25/)
|
||||
|
||||
### Buffer overflows
|
||||
|
||||
#### Outline
|
||||
|
||||
- System Basics
|
||||
- Application memory layout
|
||||
- How does function call work under the hood
|
||||
- `32-bit x86` only
|
||||
- `64-bit x86_64` similar, but with important differences
|
||||
- Buffer overflow
|
||||
- Overwriting the return address pointer
|
||||
- Point it to shell code injected
|
||||
|
||||
#### Buffer Overflows (BoFs)
|
||||
|
||||
- 2-minute version first, then all background / full version
|
||||
|
||||
#### Process memory layout: virtual address space
|
||||
|
||||
- Slide reference: [virtual address space reference](https://hungys.xyz/unix-prog-process-environment/)
|
||||
|
||||
#### Process memory layout: function calls
|
||||
|
||||
- Slide reference: [Tenouk function call figure 1](http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2.html)
|
||||
- Slide reference: [Tenouk function call figure 2](http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html)
|
||||
|
||||
#### Process memory layout: compromised frame
|
||||
|
||||
- Slide reference: [Tenouk compromised frame figure](http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html)
|
||||
|
||||
#### Computer System
|
||||
|
||||
High-level examples used in the slide:
|
||||
|
||||
```c
|
||||
car *c = malloc(sizeof(car));
|
||||
c->miles = 100;
|
||||
c->gals = 17;
|
||||
float mpg = get_mpg(c);
|
||||
free(c);
|
||||
```
|
||||
|
||||
```java
|
||||
Car c = new Car();
|
||||
c.setMiles(100);
|
||||
c.setGals(17);
|
||||
float mpg = c.getMPG();
|
||||
```
|
||||
|
||||
Assembly-language example used in the slide:
|
||||
|
||||
```asm
|
||||
get_mpg:
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
...
|
||||
popq %rbp
|
||||
ret
|
||||
```
|
||||
|
||||
- The same computation can be viewed at multiple levels:
|
||||
- C / Java source
|
||||
- assembly language
|
||||
- machine code
|
||||
- operating system context
|
||||
|
||||
#### Little Theme 1: Representation
|
||||
|
||||
- All digital systems represent everything as `0`s and `1`s.
|
||||
- The `0` and `1` are really two different voltage ranges in wires.
|
||||
- Or magnetic positions on a disk, hole depths on a DVD, or even DNA.
|
||||
- "Everything" includes:
|
||||
- numbers
|
||||
- integers and floating point
|
||||
- characters
|
||||
- building blocks of strings
|
||||
- instructions
|
||||
- directives to the CPU that make up a program
|
||||
- pointers
|
||||
- addresses of data objects stored in memory
|
||||
- These encodings are stored throughout the computer system.
|
||||
- registers
|
||||
- caches
|
||||
- memories
|
||||
- disks
|
||||
- They all need addresses.
|
||||
- find an item
|
||||
- find a place for a new item
|
||||
- reclaim memory when data is no longer needed
|
||||
|
||||
#### Little Theme 2: Translation
|
||||
|
||||
- There is a big gap between how we think about programs / data and the `0`s and `1`s of computers.
|
||||
- We need languages to describe what we mean.
|
||||
- These languages must be translated one level at a time.
|
||||
- Example point from the slide:
|
||||
- we know Java as a programming language
|
||||
- but we must work down to the `0`s and `1`s of computers
|
||||
- we try not to lose anything in translation
|
||||
- we encounter Java bytecode, C, assembly, and machine code
|
||||
|
||||
#### Little Theme 3: Control Flow
|
||||
|
||||
- How do computers orchestrate everything they are doing?
|
||||
- Within one program:
|
||||
- How are `if/else`, loops, and switches implemented?
|
||||
- How do we track nested procedure calls?
|
||||
- How do we know what to do upon `return`?
|
||||
- At the operating-system level:
|
||||
- library loading
|
||||
- sharing system resources
|
||||
- memory
|
||||
- I/O
|
||||
- disks
|
||||
|
||||
#### HW/SW Interface: Code / Compile / Run Times
|
||||
|
||||
- Code time
|
||||
- user program in C
|
||||
- `.c` file
|
||||
- Compile time
|
||||
- C compiler
|
||||
- assembler
|
||||
- Run time
|
||||
- executable `.exe` file
|
||||
- hardware executes it
|
||||
- Note from slide:
|
||||
- the compiler and assembler are themselves just programs developed using this same process
|
||||
|
||||
#### Assembly Programmer's View
|
||||
|
||||
- Programmer-visible CPU / memory state
|
||||
- Program counter
|
||||
- address of next instruction
|
||||
- called `RIP` in x86-64
|
||||
- Named registers
|
||||
- heavily used program data
|
||||
- together called the register file
|
||||
- Condition codes
|
||||
- store status information about most recent arithmetic operation
|
||||
- used for conditional branching
|
||||
- Memory
|
||||
- byte-addressable array
|
||||
- contains code and user data
|
||||
- includes the stack for supporting procedures
|
||||
|
||||
#### Turning C into Object Code
|
||||
|
||||
- Code in files `p1.c` and `p2.c`
|
||||
- Compile with:
|
||||
|
||||
```bash
|
||||
gcc -Og p1.c p2.c -o p
|
||||
```
|
||||
|
||||
- Notes from the slide
|
||||
- `-Og` uses basic optimizations
|
||||
- resulting machine code goes into file `p`
|
||||
- Translation chain
|
||||
- C program -> assembly program -> object program -> executable program
|
||||
- Associated tools
|
||||
- compiler
|
||||
- assembler
|
||||
- linker
|
||||
- static libraries (`.a`)
|
||||
|
||||
#### Machine Instruction Example
|
||||
|
||||
- C code
|
||||
|
||||
```c
|
||||
*dest = t;
|
||||
```
|
||||
|
||||
- Meaning
|
||||
- store value `t` where designated by `dest`
|
||||
- Assembly
|
||||
|
||||
```asm
|
||||
movq %rsi, (%rdx)
|
||||
```
|
||||
|
||||
- Interpretation
|
||||
- move 8-byte value to memory
|
||||
- operands
|
||||
- `t` is in register `%rsi`
|
||||
- `dest` is in register `%rdx`
|
||||
- `*dest` means memory `M[%rdx]`
|
||||
- Object code
|
||||
|
||||
```text
|
||||
0x400539: 48 89 32
|
||||
```
|
||||
|
||||
- It is a 3-byte instruction stored at address `0x400539`.
|
||||
|
||||
#### IA32 Registers - 32 bits wide
|
||||
|
||||
- General-purpose register families shown in the slide
|
||||
- `%eax`, `%ax`, `%ah`, `%al`
|
||||
- `%ecx`, `%cx`, `%ch`, `%cl`
|
||||
- `%edx`, `%dx`, `%dh`, `%dl`
|
||||
- `%ebx`, `%bx`, `%bh`, `%bl`
|
||||
- `%esi`, `%si`
|
||||
- `%edi`, `%di`
|
||||
- `%esp`, `%sp`
|
||||
- `%ebp`, `%bp`
|
||||
- Roles highlighted in the slide
|
||||
- accumulate
|
||||
- counter
|
||||
- data
|
||||
- base
|
||||
- source index
|
||||
- destination index
|
||||
- stack pointer
|
||||
- base pointer
|
||||
|
||||
#### Data Sizes
|
||||
|
||||
- Slide is primarily a figure summarizing common integer widths and sizes.
|
||||
|
||||
#### Assembly Data Types
|
||||
|
||||
- "Integer" data of `1`, `2`, `4`, or `8` bytes
|
||||
- data values
|
||||
- addresses / untyped pointers
|
||||
- No aggregate types such as arrays or structures at the assembly level
|
||||
- just contiguous bytes in memory
|
||||
- Two common syntaxes
|
||||
- `AT&T`
|
||||
- used in the course, slides, textbook, GNU tools
|
||||
- `Intel`
|
||||
- used in Intel documentation and Intel tools
|
||||
- Need to know which syntax you are reading because operand order may be reversed.
|
||||
|
||||
#### Three Basic Kinds of Instructions
|
||||
|
||||
- Transfer data between memory and register
|
||||
- load
|
||||
- `%reg = Mem[address]`
|
||||
- store
|
||||
- `Mem[address] = %reg`
|
||||
- Perform arithmetic on register or memory data
|
||||
- examples: addition, shifting, bitwise operations
|
||||
- Control flow
|
||||
- unconditional jumps to / from procedures
|
||||
- conditional branches
|
||||
|
||||
#### Abstract Memory Layout
|
||||
|
||||
```text
|
||||
High addresses
|
||||
Stack <- local variables, procedure context
|
||||
Dynamic Data <- heap, new / malloc
|
||||
Static Data <- globals / static variables
|
||||
Literals <- large constants such as strings
|
||||
Instructions
|
||||
Low addresses
|
||||
```
|
||||
|
||||
#### The ELF File Format
|
||||
|
||||
- ELF = Executable and Linkable Format
|
||||
- One of the most widely used binary object formats
|
||||
- ELF is architecture-independent
|
||||
- ELF file types
|
||||
- Relocatable
|
||||
- must be fixed by the linker before execution
|
||||
- Executable
|
||||
- ready for execution
|
||||
- Shared
|
||||
- shared libraries with linking information
|
||||
- Core
|
||||
- core dumps created when a program terminates with a fault
|
||||
- Tools mentioned on slide
|
||||
- `readelf`
|
||||
- `file`
|
||||
- `objdump -D`
|
||||
|
||||
#### Process Memory Layout (32-bit x86 machine)
|
||||
|
||||
- This slide is primarily a diagram.
|
||||
- Key idea: a `32-bit x86` process has a standard virtual memory layout with code, static data, heap, and stack arranged in distinct regions.
|
||||
|
||||
We continue with the concrete runtime layout and the actual overflow mechanics in Lecture 18.
|
||||
594
content/CSE4303/CSE4303_L18.md
Normal file
594
content/CSE4303/CSE4303_L18.md
Normal file
@@ -0,0 +1,594 @@
|
||||
# CSE4303 Introduction to Computer Security (Lecture 18)
|
||||
|
||||
> Due to lack of my attention, this lecture note is generated by AI to create continuations of the previous lecture note. I kept this warning because the note was created by AI.
|
||||
|
||||
#### Software security
|
||||
|
||||
### Overview
|
||||
|
||||
#### Outline
|
||||
|
||||
- Context
|
||||
- Prominent software vulnerabilities and exploits
|
||||
- Buffer overflows
|
||||
- Background: C code, compilation, memory layout, execution
|
||||
- Baseline exploit
|
||||
- Challenges
|
||||
- Defenses, countermeasures, counter-countermeasures
|
||||
|
||||
### Buffer overflows
|
||||
|
||||
#### All programs are stored in memory
|
||||
|
||||
- The process's view of memory is that it owns all of it.
|
||||
- For a `32-bit` process, the virtual address space runs from:
|
||||
- `0x00000000`
|
||||
- to `0xffffffff`
|
||||
- In reality, these are virtual addresses.
|
||||
- The OS and CPU map them to physical addresses.
|
||||
|
||||
#### The instructions themselves are in memory
|
||||
|
||||
- Program text is also stored in memory.
|
||||
- The slide shows instructions such as:
|
||||
|
||||
```asm
|
||||
0x4c2 sub $0x224,%esp
|
||||
0x4c1 push %ecx
|
||||
0x4bf mov %esp,%ebp
|
||||
0x4be push %ebp
|
||||
```
|
||||
|
||||
- Important point:
|
||||
- code and data are both memory-resident
|
||||
- control flow therefore depends on values stored in memory
|
||||
|
||||
#### Data's location depends on how it's created
|
||||
|
||||
- Static initialized data example
|
||||
|
||||
```c
|
||||
static const int y = 10;
|
||||
```
|
||||
|
||||
- Static uninitialized data example
|
||||
|
||||
```c
|
||||
static int x;
|
||||
```
|
||||
|
||||
- Command-line arguments and environment are set when the process starts.
|
||||
- Stack data appears when functions run.
|
||||
|
||||
```c
|
||||
int f() {
|
||||
int x;
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
- Heap data appears at runtime.
|
||||
|
||||
```c
|
||||
malloc(sizeof(long));
|
||||
```
|
||||
|
||||
- Summary from the slide
|
||||
- Known at compile time
|
||||
- text
|
||||
- initialized data
|
||||
- uninitialized data
|
||||
- Set when process starts
|
||||
- command line and environment
|
||||
- Runtime
|
||||
- stack
|
||||
- heap
|
||||
|
||||
#### We are going to focus on runtime attacks
|
||||
|
||||
- Stack and heap grow in opposite directions.
|
||||
- Compiler-generated instructions adjust the stack size at runtime.
|
||||
- The stack pointer tracks the active top of the stack.
|
||||
- Repeated `push` instructions place values onto the stack.
|
||||
- The slides use the sequence:
|
||||
- `push 1`
|
||||
- `push 2`
|
||||
- `push 3`
|
||||
- `return`
|
||||
- Heap allocation is apportioned by the OS and managed in-process by `malloc`.
|
||||
- The lecture says: focusing on the stack for now.
|
||||
|
||||
```text
|
||||
0x00000000 0xffffffff
|
||||
Heap ---------------------------------> <--------------------------------- Stack
|
||||
```
|
||||
|
||||
#### Stack layout when calling functions
|
||||
|
||||
Questions asked on the slide:
|
||||
|
||||
- What do we do when we call a function?
|
||||
- What data need to be stored?
|
||||
- Where do they go?
|
||||
- How do we return from a function?
|
||||
- What data need to be restored?
|
||||
- Where do they come from?
|
||||
|
||||
Example used in the slide:
|
||||
|
||||
```c
|
||||
void func(char *arg1, int arg2, int arg3)
|
||||
{
|
||||
char loc1[4];
|
||||
int loc2;
|
||||
int loc3;
|
||||
}
|
||||
```
|
||||
|
||||
Important layout points:
|
||||
|
||||
- Arguments are pushed in reverse order of code.
|
||||
- Local variables are pushed in the same order as they appear in the code.
|
||||
- The slide then introduces two unknown slots between locals and arguments.
|
||||
|
||||
#### Accessing variables
|
||||
|
||||
Example:
|
||||
|
||||
```c
|
||||
void func(char *arg1, int arg2, int arg3)
|
||||
{
|
||||
char loc1[4];
|
||||
int loc2;
|
||||
int loc3;
|
||||
...
|
||||
loc2++;
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Question from the slide:
|
||||
- Where is `loc2`?
|
||||
|
||||
Step-by-step answer developed in the slides:
|
||||
|
||||
- Its absolute address is undecidable at compile time.
|
||||
- We do not know exactly where `loc2` is in absolute memory.
|
||||
- We do not know how many arguments there are in general.
|
||||
- But `loc2` is always a fixed offset before the frame metadata.
|
||||
- This motivates the frame pointer.
|
||||
|
||||
Definitions from the slide:
|
||||
|
||||
- Stack frame
|
||||
- the current function call's region on the stack
|
||||
- Frame pointer
|
||||
- `%ebp`
|
||||
- Example answer
|
||||
- `loc2` is at `-8(%ebp)`
|
||||
|
||||
#### Notation
|
||||
|
||||
- `%ebp`
|
||||
- a memory address stored in the frame-pointer register
|
||||
- `(%ebp)`
|
||||
- the value at memory address `%ebp`
|
||||
- like dereferencing a pointer
|
||||
|
||||
The slide sequence then shows:
|
||||
|
||||
```asm
|
||||
pushl %ebp
|
||||
movl %esp, %ebp
|
||||
```
|
||||
|
||||
- Meaning:
|
||||
- first save the old frame pointer on the stack
|
||||
- then set the new frame pointer to the current stack pointer
|
||||
|
||||
#### Returning from functions
|
||||
|
||||
Example caller:
|
||||
|
||||
```c
|
||||
int main()
|
||||
{
|
||||
...
|
||||
func("Hey", 10, -3);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Questions from the slides:
|
||||
|
||||
- How do we restore `%ebp`?
|
||||
- How do we resume execution at the correct place?
|
||||
|
||||
Slide answers:
|
||||
|
||||
- Push `%ebp` before locals.
|
||||
- Set `%ebp` to current `%esp`.
|
||||
- Set `%ebp` to `(%ebp)` at return.
|
||||
- Push next `%eip` before `call`.
|
||||
- Set `%eip` to `4(%ebp)` at return.
|
||||
|
||||
#### Stack and functions: Summary
|
||||
|
||||
- Calling function
|
||||
- push arguments onto the stack in reverse order
|
||||
- push the return address
|
||||
- the address of the instruction that should run after control returns
|
||||
- jump to the function's address
|
||||
- Called function
|
||||
- push old frame pointer `%ebp` onto the stack
|
||||
- set frame pointer `%ebp` to current `%esp`
|
||||
- push local variables onto the stack
|
||||
- access locals as offsets from `%ebp`
|
||||
- Returning function
|
||||
- reset previous stack frame
|
||||
- `%ebp = (%ebp)`
|
||||
- jump back to return address
|
||||
- `%eip = 4(%ebp)`
|
||||
|
||||
#### Quick overview (again)
|
||||
|
||||
- Buffer
|
||||
- contiguous set of a given data type
|
||||
- common in C
|
||||
- all strings are buffers of `char`
|
||||
- Overflow
|
||||
- put more into the buffer than it can hold
|
||||
- Question
|
||||
- where does the extra data go?
|
||||
- Slide answer
|
||||
- now that we know memory layouts, we can reason about where the overwrite lands
|
||||
|
||||
#### A buffer overflow example
|
||||
|
||||
Example 1 from the slide:
|
||||
|
||||
```c
|
||||
void func(char *arg1)
|
||||
{
|
||||
char buffer[4];
|
||||
strcpy(buffer, arg1);
|
||||
...
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
char *mystr = "AuthMe!";
|
||||
func(mystr);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Step-by-step effect shown in the slides:
|
||||
|
||||
- Initial stack region includes:
|
||||
- `buffer`
|
||||
- saved `%ebp`
|
||||
- saved `%eip`
|
||||
- `&arg1`
|
||||
- First 4 bytes copied:
|
||||
- `A u t h`
|
||||
- Remaining bytes continue writing:
|
||||
- `M e ! \0`
|
||||
- Because `strcpy` keeps copying until it sees `\0`, bytes go past the end of the buffer.
|
||||
- In the example, upon return:
|
||||
- `%ebp` becomes `0x0021654d`
|
||||
- Result:
|
||||
- segmentation fault
|
||||
- shown as `SEGFAULT (0x00216551)` in the slide sequence
|
||||
|
||||
#### A buffer overflow example: changing control data vs. changing program data
|
||||
|
||||
Example 2 from the slide:
|
||||
|
||||
```c
|
||||
void func(char *arg1)
|
||||
{
|
||||
int authenticated = 0;
|
||||
char buffer[4];
|
||||
strcpy(buffer, arg1);
|
||||
if (authenticated) { ... }
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
char *mystr = "AuthMe!";
|
||||
func(mystr);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Step-by-step effect shown in the slides:
|
||||
|
||||
- Initial stack contains:
|
||||
- `buffer`
|
||||
- `authenticated`
|
||||
- saved `%ebp`
|
||||
- saved `%eip`
|
||||
- `&arg1`
|
||||
- Overflow writes:
|
||||
- `A u t h` into `buffer`
|
||||
- `M e ! \0` into `authenticated`
|
||||
- Result:
|
||||
- code still runs
|
||||
- user now appears "authenticated"
|
||||
|
||||
Important lesson:
|
||||
- A buffer overflow does not need to crash.
|
||||
- It may silently change program data or logic.
|
||||
|
||||
#### `gets` vs `fgets`
|
||||
|
||||
Unsafe function shown in the slide:
|
||||
|
||||
```c
|
||||
void vulnerable()
|
||||
{
|
||||
char buf[80];
|
||||
gets(buf);
|
||||
}
|
||||
```
|
||||
|
||||
Safer version shown in the slide:
|
||||
|
||||
```c
|
||||
void safe()
|
||||
{
|
||||
char buf[80];
|
||||
fgets(buf, 64, stdin);
|
||||
}
|
||||
```
|
||||
|
||||
Even safer pattern from the next slide:
|
||||
|
||||
```c
|
||||
void safer()
|
||||
{
|
||||
char buf[80];
|
||||
fgets(buf, sizeof(buf), stdin);
|
||||
}
|
||||
```
|
||||
|
||||
Reference from slide:
|
||||
- [List of vulnerable C functions](https://security.web.cern.ch/security/recommendations/en/codetools/c.shtml)
|
||||
|
||||
#### User-supplied strings
|
||||
|
||||
- In the toy examples, the strings are constant.
|
||||
- In reality they come from users in many ways:
|
||||
- text input
|
||||
- packets
|
||||
- environment variables
|
||||
- file input
|
||||
- Validating assumptions about user input is extremely important.
|
||||
|
||||
#### What's the worst that could happen?
|
||||
|
||||
Using:
|
||||
|
||||
```c
|
||||
char buffer[4];
|
||||
strcpy(buffer, arg1);
|
||||
```
|
||||
|
||||
- `strcpy` will let you write as much as you want until a `\0`.
|
||||
- If attacker-controlled input is long enough, the memory past the buffer becomes "all ours" from the attacker's perspective.
|
||||
- That raises the key question from the slide:
|
||||
- what could you write to memory to wreak havoc?
|
||||
|
||||
#### Code injection
|
||||
|
||||
- Title-only transition slide.
|
||||
- It introduces the move from accidental overwrite to deliberate attacker payloads.
|
||||
|
||||
#### High-level idea
|
||||
|
||||
Example used in the slide:
|
||||
|
||||
```c
|
||||
void func(char *arg1)
|
||||
{
|
||||
char buffer[4];
|
||||
sprintf(buffer, arg1);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Two-step plan shown in the slides:
|
||||
|
||||
- 1. Load my own code into memory.
|
||||
- 2. Somehow get `%eip` to point to it.
|
||||
|
||||
The slide sequence draws this as:
|
||||
- vulnerable buffer on stack
|
||||
- attacker-controlled bytes placed in memory
|
||||
- `%eip` redirected toward those bytes
|
||||
|
||||
#### This is nontrivial
|
||||
|
||||
- Pulling off this attack requires getting a few things really right, and some things only sorta right.
|
||||
- The lecture says to think about what is tricky about the attack.
|
||||
- Main security idea:
|
||||
- the key to defending it is to make the hard parts really hard
|
||||
|
||||
#### Challenge 1: Loading code into memory
|
||||
|
||||
- The attacker payload must be machine-code instructions.
|
||||
- already compiled
|
||||
- ready to run
|
||||
- We have to be careful in how we construct it.
|
||||
- It cannot contain all-zero bytes.
|
||||
- otherwise `sprintf`, `gets`, `scanf`, and similar routines stop copying
|
||||
- It cannot make use of the loader.
|
||||
- because we are injecting the bytes directly
|
||||
- It cannot use the stack.
|
||||
- because we are in the process of smashing it
|
||||
- The lecture then gives the name:
|
||||
- shellcode
|
||||
|
||||
#### What kind of code would we want to run?
|
||||
|
||||
- Goal: full-purpose shell
|
||||
- code to launch a shell is called shellcode
|
||||
- it is nontrivial to write shellcode that works as injected code
|
||||
- no zeroes
|
||||
- cannot use the stack
|
||||
- no loader dependence
|
||||
- there are many shellcodes already written
|
||||
- there are even competitions for writing the smallest shellcode
|
||||
- Goal: privilege escalation
|
||||
- ideally, attacker goes from guest or non-user to root
|
||||
|
||||
#### Shellcode
|
||||
|
||||
High-level C version shown in the slides:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
int main() {
|
||||
char *name[2];
|
||||
name[0] = "/bin/sh";
|
||||
name[1] = NULL;
|
||||
execve(name[0], name, NULL);
|
||||
}
|
||||
```
|
||||
|
||||
Assembly version shown in the slides:
|
||||
|
||||
```asm
|
||||
xorl %eax, %eax
|
||||
pushl %eax
|
||||
pushl $0x68732f2f
|
||||
pushl $0x6e69622f
|
||||
movl %esp, %ebx
|
||||
pushl %eax
|
||||
...
|
||||
```
|
||||
|
||||
Machine-code bytes shown in the slides:
|
||||
|
||||
```text
|
||||
"\x31\xc0"
|
||||
"\x50"
|
||||
"\x68""//sh"
|
||||
"\x68""/bin"
|
||||
"\x89\xe3"
|
||||
"\x50"
|
||||
...
|
||||
```
|
||||
|
||||
Important point from the slide:
|
||||
- those machine-code bytes can become part of the attacker's input
|
||||
|
||||
#### Challenge 2: Getting our injected code to run
|
||||
|
||||
- We cannot insert a fresh "jump into my code" instruction.
|
||||
- We must use whatever code is already running.
|
||||
|
||||
#### Hijacking the saved `%eip`
|
||||
|
||||
- Strategy:
|
||||
- overwrite the saved return address
|
||||
- make it point into the injected bytes
|
||||
- Core idea:
|
||||
- when the function returns, the CPU loads the overwritten return address into `%eip`
|
||||
|
||||
Question raised by the slides:
|
||||
- But how do we know the address?
|
||||
|
||||
Failure mode shown in the slide sequence:
|
||||
- if the guessed address is wrong, the CPU tries to execute data bytes
|
||||
- this is most likely not valid code
|
||||
- result:
|
||||
- invalid instruction
|
||||
- CPU "panic" / crash
|
||||
|
||||
#### Challenge 3: Finding the return address
|
||||
|
||||
- If we do not have the code, we may not know how far the buffer is from the saved `%ebp`.
|
||||
- One approach:
|
||||
- try many different values
|
||||
- Worst case:
|
||||
- `2^32` possible addresses on `32-bit`
|
||||
- `2^64` possible addresses on `64-bit`
|
||||
- But without address randomization:
|
||||
- the stack always starts from the same fixed address
|
||||
- the stack grows, but usually not very deeply unless heavily recursive
|
||||
|
||||
#### Improving our chances: nop sleds
|
||||
|
||||
- `nop` is a single-byte instruction.
|
||||
- Definition:
|
||||
- it does nothing except move execution to the next instruction
|
||||
- NOP sled idea:
|
||||
- put a long sequence of `nop` bytes before the real malicious code
|
||||
- now jumping anywhere in that region still works
|
||||
- execution slides down into the payload
|
||||
|
||||
Why this helps:
|
||||
- it increases the chance that an approximate address guess still succeeds
|
||||
- the slides explicitly state:
|
||||
- now we improve our chances of guessing by a factor of `#nops`
|
||||
|
||||
```text
|
||||
[padding][saved return address guess][nop nop nop ...][malicious code]
|
||||
```
|
||||
|
||||
#### Putting it all together
|
||||
|
||||
- Payload components shown in the slides:
|
||||
- padding
|
||||
- guessed return address
|
||||
- NOP sled
|
||||
- malicious code
|
||||
- Constraint noted by the lecture:
|
||||
- input has to start wherever the vulnerable `gets` / similar function begins writing
|
||||
|
||||
#### Buffer overflow defense #1: use secure bounds-checking functions
|
||||
|
||||
- User-level protection
|
||||
- Replace unbounded routines with bounded ones.
|
||||
- Prefer secure languages where possible:
|
||||
- Java
|
||||
- Rust
|
||||
- etc.
|
||||
|
||||
#### Buffer overflow defense #2: Address Space Layout Randomization (ASLR)
|
||||
|
||||
- Randomize starting address of program regions.
|
||||
- Goal:
|
||||
- prevent attacker from guessing / finding the correct address to put in the return-address slot
|
||||
- OS-level protection
|
||||
|
||||
#### Buffer overflow counter-technique: NOP sled
|
||||
|
||||
- Counter-technique against uncertain addresses
|
||||
- By jumping somewhere into a wide sled, exact address knowledge becomes less necessary
|
||||
|
||||
#### Buffer overflow defense #3: Canary
|
||||
|
||||
- Put a guard value between vulnerable local data and control-flow data.
|
||||
- If overflow changes the canary, the program can detect corruption before returning.
|
||||
- OS-level / compiler-assisted protection in the lecture framing
|
||||
|
||||
#### Buffer overflow defense #4: No-execute bits (NX)
|
||||
|
||||
- Mark the stack as not executable.
|
||||
- Requires hardware support.
|
||||
- OS / hardware-level protection
|
||||
|
||||
#### Buffer overflow counter-technique: ret-to-libc and ROP
|
||||
|
||||
- Code in the C library is already stored at consistent addresses.
|
||||
- Attacker can find code in the C library that has the desired effect.
|
||||
- possibly heavily fragmented
|
||||
- Then return to the necessary address or addresses in the proper order.
|
||||
- This is the motivation behind:
|
||||
- `ret-to-libc`
|
||||
- Return-Oriented Programming (ROP)
|
||||
|
||||
We will continue from defenses / exploitation follow-ups in the next lecture.
|
||||
@@ -20,5 +20,7 @@ export default {
|
||||
CSE4303_L13: "Introduction to Computer Security (Lecture 13)",
|
||||
CSE4303_L14: "Introduction to Computer Security (Lecture 14)",
|
||||
CSE4303_L15: "Introduction to Computer Security (Lecture 15)",
|
||||
CSE4303_L16: "Introduction to Computer Security (Lecture 16)"
|
||||
CSE4303_L16: "Introduction to Computer Security (Lecture 16)",
|
||||
CSE4303_L17: "Introduction to Computer Security (Lecture 17)",
|
||||
CSE4303_L18: "Introduction to Computer Security (Lecture 18)"
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ I made this little book for my Honor Thesis, showing the relevant parts of my wo
|
||||
Contents updated as displayed and based on my personal interest and progress with Prof.Feres.
|
||||
|
||||
|
||||
<iframe src="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/main.pdf" width="100%" height="600px" style="border: none;" title="Embedded PDF Viewer">
|
||||
<iframe src="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/latex/main.pdf" width="100%" height="600px" style="border: none;" title="Embedded PDF Viewer">
|
||||
<!-- Fallback content for browsers that do not support iframes or PDFs within them -->
|
||||
<iframe src="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/main.pdf" width="100%" height="500px">
|
||||
<p>Your browser does not support iframes. You can <a href="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/main.pdf">download the PDF</a> file instead.</p>
|
||||
<iframe src="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/latex/main.pdf" width="100%" height="500px">
|
||||
<p>Your browser does not support iframes. You can <a href="https://git.trance-0.com/Trance-0/HonorThesis/raw/branch/main/latex/main.pdf">download the PDF</a> file instead.</p>
|
||||
</iframe>
|
||||
|
||||
69
content/Math4202/Math4202_L27.md
Normal file
69
content/Math4202/Math4202_L27.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Math4202 Topology II (Lecture 27)
|
||||
|
||||
## Algebraic Topology
|
||||
|
||||
### Fundamental Groups for Higher Dimensional Sphere
|
||||
|
||||
#### Theorem for "gluing" fundamental group
|
||||
|
||||
Suppose $X=U\cup V$, where $U$ and $V$ are open subsets of $X$. Suppose that $U\cap V$ is path connected, and $x\in U\cap V$. Let $i,j$ be the inclusion maps of $U$ and $V$ into $X$, the images of the induced homomorphisms
|
||||
|
||||
$$
|
||||
i_*:\pi_1(U,x_0)\to \pi_1(X,x_0)\quad j_*:\pi_1(V,x_0)\to \pi_1(X,x_0)
|
||||
$$
|
||||
|
||||
The image of the two map generate $\pi_1(X,x_0)$.
|
||||
|
||||
$G$ is a group, and let $S\subseteq G$, where $G$ is generated by $S$, if $\forall g\in G$, $\exists s_1,s_2,\ldots,s_n\in S$ such that $g=s_1s_2\ldots s_n\in G$. (We can write $G$ as a word of elements in $S$.)
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
Let $f$ be a loop in $X$, $f\simeq g_1*g_2*\ldots*g_n$, where $g_i$ is a loop in $U$ or $V$.
|
||||
|
||||
For example, consider the function, $f=f_1*f_2*f_3*f_4$, where $f_1\in S_+$, $f_2\in S_-$, $f_3\in S_+$, $f_4\in S_-$.
|
||||
|
||||
Take the functions $\bar{\alpha_1}*\alpha_1\simeq e_{x_1}$ where $x_1$ is the intersecting point on $f_1$ and $f_2$.
|
||||
|
||||
Therefore,
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
f&=f_1*f_2*f_3*f_4\\
|
||||
&(f_1*\bar{\alpha})*(\alpha_1*f_2*\bar{\alpha_2})*(\alpha_2*f_3*\bar{\alpha_3})*(\alpha_4*f_4)
|
||||
\end{aligned}
|
||||
$$
|
||||
|
||||
This decompose $f$ into a word of elements in either $S_+$ or $S_-$.
|
||||
|
||||
---
|
||||
|
||||
Note that $f$ is a continuous function $I\to X$, for $t\in I$, $\exists I_t$ being a small neighborhood of $t$ such that $f(I_t)\subseteq U$ or $f(I_t)\subseteq V$.
|
||||
|
||||
Since $U_{t\in I}I_t=I$, then $\{I_t\}_{t\in I}$ is an open cover of $I$.
|
||||
|
||||
By compactness of $I$, there is a finite subcover $\{I_{t_1},\ldots,I_{t_n}\}$.
|
||||
|
||||
Therefore, we can create a partition of $I$ into $[s_i,s_{i+1}]\subseteq I_{t_k}$ for some $k$.
|
||||
|
||||
Then with the definition of $I_{t_k}$, $f([s_i,s_{i+1}])\subseteq U$ or $V$.
|
||||
|
||||
Then we can connect $x_0$ to $f(s_i)$ with a path $\alpha_i\subseteq U\cap V$.
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
f&=f|_{[s_0,s_1]}*f|_{[s_1,s_2]}*\ldots**f|_{[s_{n-1},s_n]}\\
|
||||
&\simeq f|_{[s_0,s_1]}*(\bar{\alpha_1}*\alpha_1)*f|_{[s_1,s_2]}*(\bar{\alpha_2}*\alpha_2)*\ldots*f|_{[s_{n-1},s_n]}*(\bar{\alpha_n}*\alpha_n
|
||||
)\\
|
||||
&=(f|_{[s_0,s_1]}*\bar{\alpha_1})*(\alpha_1*f|_{[s_1,s_2]}*\bar{\alpha_2})*\ldots*(\alpha_{n-1}*f|_{[s_{n-1},s_n]}*\bar{\alpha_n})\\
|
||||
&=g_1*g_2*\ldots*g_n
|
||||
\end{aligned}
|
||||
$$
|
||||
|
||||
</details>
|
||||
|
||||
#### Corollary in higher dimensional sphere
|
||||
|
||||
Since $S^n_+$ and $S^n_-$ are homeomorphic to open balls $B^n$, then $\pi_1(S^n_+,x_0)=\pi_1(S^n_-,x_0)=\pi_1(B^n,x_0)=\{e\}$ for $n\geq 2$.
|
||||
|
||||
> Preview: Van Kampen Theorem
|
||||
72
content/Math4202/Math4202_L28.md
Normal file
72
content/Math4202/Math4202_L28.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Math4202 Topology II (Lecture 28)
|
||||
|
||||
## Algebraic Topology
|
||||
|
||||
### Fundamental Groups of Some Surfaces
|
||||
|
||||
Recall from last week, we will see the fundamental group of $T^2=S^1\times S^1$, and $\mathbb{R}P^2$, Torus with genus $2$.
|
||||
|
||||
Some of them are abelian, and some are not.
|
||||
|
||||
#### Theorem for fundamental groups of product spaces
|
||||
|
||||
Let $X,Y$ be two manifolds. Then the fundamental group of $X\times Y$ is the direct product of their fundamental groups,
|
||||
|
||||
i.e.
|
||||
|
||||
$$
|
||||
\pi_1(X\times Y,(x_0,y_0))=\pi_1(X,x_0)\times \pi_1(Y,y_0)
|
||||
$$
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
We need to find group homomorphism: $\phi:\pi_1(X\times Y,(x_0,y_0))\to \pi_1(X,x_0)\times \pi_1(Y,y_0)$.
|
||||
|
||||
Let $P_x,P_y$ be the projection from $X\times Y$ to $X$ and $Y$ respectively.
|
||||
|
||||
$$
|
||||
(P_x)_*:\pi_1(X\times Y,(x_0,y_0))\to \pi_1(X,x_0)
|
||||
$$
|
||||
|
||||
$$
|
||||
(P_y)_*:\pi_1(X\times Y,(x_0,y_0))\to \pi_1(Y,y_0)
|
||||
$$
|
||||
|
||||
Given $\alpha\in \pi_1(X\times Y,(x_0,y_0))$, then $\phi(\alpha)=((P_x)_*\alpha,(P_y)_*\alpha)\in \pi_1(X,x_0)\times \pi_1(Y,y_0)$.
|
||||
|
||||
Since $(P_x)_*$ and $(P_y)_*$ are group homomorphism, so $\phi$ is a group homomorphism.
|
||||
|
||||
**Then we need to show that $\phi$ is bijective.** Then we have the isomorphism of fundamental groups.
|
||||
|
||||
To show $\phi$ is injective, then it is sufficient to show that $\ker(\phi)=\{e\}$.
|
||||
|
||||
Given $\alpha\in \ker(\phi)$, then $(P_x)_*\alpha=\{e_x\}$ and $(P_y)_*\alpha=\{e_y\}$, so we can find a path homotopy $P_X(\alpha)\simeq e_x$ and $P_Y(\alpha)\simeq e_y$.
|
||||
|
||||
So we can build $(H_x,H_y):X\times Y\times I\to X\times I$ by $(x,y,t)\mapsto (H_x(x,t),H_y(y,t))$ is a homotopy from $\alpha$ and $e_x\times e_y$.
|
||||
|
||||
So $[\alpha]=[(e_x\times e_y)]$. $\ker(\phi)=\{[(e_x\times e_y)]\}$.
|
||||
|
||||
Next, we show that $\phi$ is surjective.
|
||||
|
||||
Given $(\alpha,\beta)\in \pi_1(X,x_0)\times \pi_1(Y,y_0)$, then $(\alpha,\beta)$ is a loop in $X\times Y$ based at $(x_0,y_0)$. and $(P_x)_*([\alpha,\beta])=[\alpha]$ and $(P_y)_*([\alpha,\beta])=[\beta]$.
|
||||
</details>
|
||||
|
||||
#### Corollary for fundamental groups of $T^2$
|
||||
|
||||
The fundamental group of $T^2=S^1\times S^1$ is $\mathbb{Z}\times \mathbb{Z}$.
|
||||
|
||||
#### Theorem for fundamental groups of $\mathbb{R}P^2$
|
||||
|
||||
$\mathbb{R}P^2$ is a compact 2-dimensional manifold with the universal covering space $S^2$ and a $2-1$ covering map $q:S^2\to \mathbb{R}P^2$.
|
||||
|
||||
#### Corollary for fundamental groups of $\mathbb{R}P^2$
|
||||
|
||||
$\pi_1(\mathbb{R}P^2)=\#q^{-1}(\{x_0\})=\{a,b\}=\mathbb{Z}/2\mathbb{Z}$
|
||||
|
||||
Using the path-lifting correspondence.
|
||||
|
||||
#### Lemma for The fundamental group of figure-8
|
||||
|
||||
The fundamental group of figure-8 is not abelian.
|
||||
|
||||
57
content/Math4202/Math4202_L29.md
Normal file
57
content/Math4202/Math4202_L29.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Math4202 Topology II (Lecture 29)
|
||||
|
||||
## Algebraic Topology
|
||||
|
||||
### Fundamental Groups of Some Surfaces
|
||||
|
||||
Recall from previous lecture, we talked about figure 8 shape.
|
||||
|
||||
#### Lemma The fundamental group of figure-8 is not abelian
|
||||
|
||||
The fundamental group of figure-8 is not abelian.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
Consider $U,V$ be two "fish shape" where $U\cup V$ is the figure-8 shape, and $U\cap V$ is $x$ shape.
|
||||
|
||||
The $x$ shape is path connected,
|
||||
|
||||
$\pi_1(U,x_0)$ is isomorphic to $\pi_1(S^1,x_0)$, and $\pi_1(V,x_0)$ is isomorphic to $\pi_1(S^1,x_0)$.
|
||||
|
||||
To show that is not abelian, we need to show that $\alpha*\beta\neq \beta*\alpha$.
|
||||
|
||||
We will use covering map to do this.
|
||||
|
||||
[Universal covering of figure-8](https://notenexta.trance-0.com/Math4202/universal-covering-of-figure-8.png)
|
||||
|
||||
However, for proving our result, it is sufficient to use xy axis with loops on each integer lattice.
|
||||
|
||||
And $\tilde{\alpha*\beta}(1)=(1,0)$ and $\tilde{\beta*\alpha}(1)=(0,1)$. By path lifting correspondence, the two loops are not homotopic.
|
||||
|
||||
</details>
|
||||
|
||||
#### Theorem for fundamental groups of double torus (Torus with genus 2)
|
||||
|
||||
The fundamental group of Torus with genus 2 is not abelian.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
If we cut the torus in the middle, we can have $U,V$ is two "punctured torus", which is homotopic to the figure-8 shape.
|
||||
|
||||
But the is trick is not enough to show that the fundamental group is not abelian.
|
||||
|
||||
---
|
||||
|
||||
First we use quotient map $q_1$ to map double torus to two torus connected at one point.
|
||||
|
||||
Then we use quotient map $q_2$ to map two torus connected at one point to figure-8 shape.
|
||||
|
||||
So $q=q_2\circ q_1$ is a quotient map from double torus to figure-8 shape.
|
||||
|
||||
Then consider the inclusion map $i$ and let the double torus be $X$, we claim that $i_*:\pi_1(\infty,x_0)\to \pi_1(X,x_0)$ is injective.
|
||||
|
||||
If $\pi_1(X,x_0)$ is abelian, then the figure 8 shape is abelian, that is contradiction.
|
||||
|
||||
</details>
|
||||
91
content/Math4202/Math4202_L30.md
Normal file
91
content/Math4202/Math4202_L30.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Math4202 Topology II (Lecture 30)
|
||||
|
||||
## Algebraic Topology
|
||||
|
||||
We skipped a few chapters about Jordan curve theorem, which will be your final project soon. LOL, I will embedded the link once I'm done.
|
||||
|
||||
### Seifert-Van Kampen Theorem
|
||||
|
||||
#### The Seifert-Van Kampen Theorem
|
||||
|
||||
Let $X=U\cup V$ be a union of two open subspaces. Suppose that $U\cap V$, $U,V$ are path connected. Fix $x_0\in U\cap V$.
|
||||
|
||||
Let $H$ be a group (arbitrary). And now we assume $\phi_1,\phi_2$ be a group homomorphism, and $\phi_1:\pi_1(U,x_0)\to H$, and $\phi_2:\pi_1(V,x_0)\to H$.
|
||||
|
||||

|
||||
|
||||
Let $i_1,i_2,j_1,j_2,i_{12}$ be group homomorphism induced by the inclusion maps.
|
||||
|
||||
Assume this diagram commutes.
|
||||
|
||||
$$
|
||||
\phi_1\circ i_1=\phi_2\circ i_2
|
||||
$$
|
||||
|
||||
There is a group homomorphism $\Phi:\pi_1(X,x_0)\to H$ making the diagram commute. $\Phi\circ j_1=\phi_1$ and $\Phi\circ j_2=\phi_2$.
|
||||
|
||||
We may change the base point using conjugations.
|
||||
|
||||
<details>
|
||||
<summary>Side notes about free product of two groups</summary>
|
||||
|
||||
Consider arbitrary group $G_1,G_2$, then $G_1\times G_2$ is a group.
|
||||
|
||||
Note that the inclusion map $i_1:G_1\to G_1\times G_2$ is a group homomorphism and the inclusion map $i_2:G_2\to G_1\times G_2$ is a group homomorphism. The image of them commutes since $(e,g_2)(g_1,e)=(g_1,g_2)=(g_1,e)(e,g_2)$.
|
||||
|
||||
#### The universal property
|
||||
|
||||
Then we want to have a group $G$ such that for all group homomorphism $\phi:G_1\to H$ and $G_2\to H$, such that there always exists a map $\Phi: G\to H$ such that:
|
||||
|
||||
- $\Phi\circ i_1=\phi_1$
|
||||
- $\Phi\circ i_2=\phi_2$
|
||||
|
||||
#### How to construct the free group?
|
||||
|
||||
We consider
|
||||
|
||||
$$
|
||||
G_1*G_2=S=\{g_1h_1g_2h_2:g_1,g_2\in G_1,h_1,h_2\in G_2\}/\sim
|
||||
$$
|
||||
|
||||
And we set $g_ie_{G_2}g_{i+1}\sim g_ig_{i+1}$ for $g_i\in G_1$ and $g_{i+1}\in G_2$.
|
||||
|
||||
And $h_je_{G_1}h_{j+1}\sim h_jh_{j+1}$ for $h_j\in G_2$ and $h_{j+1}\in G_1$.
|
||||
|
||||
And we define the group operation
|
||||
|
||||
$$
|
||||
(g_1 h_1\cdots g_k h_k)*(h_1' g_1'\cdots h_l' g_l')=g_1 h_1\cdots g_k h_k g_1' h_2'\cdots h_l' g_l'
|
||||
$$
|
||||
|
||||
And the inverse is defined
|
||||
|
||||
$$
|
||||
(g_1 h_1\cdots g_k h_k)^{-1}=h_k^{-1} g_k^{-1}\cdots h_1^{-1} g_1^{-1}
|
||||
$$
|
||||
|
||||
And $G=S$ is a well-defined group.
|
||||
|
||||
The homeomorphism $G\to H$ is defined as
|
||||
|
||||
$$
|
||||
\Phi((g_1 h_1\cdots g_k h_k))=\phi_1(g_1)\circ \phi_2(h_1)\circ \cdots \circ \phi_1(g_k)\circ \phi_2(h_k)
|
||||
$$
|
||||
|
||||
Note $\circ$ is the group operation in $H$.
|
||||
|
||||
> Group with such universal property is unique, so we don't need to worry for that too much.
|
||||
|
||||
</details>
|
||||
|
||||
Back to the Seifert-Van Kampen Theorem:
|
||||
|
||||
Let $H=\pi_1(U,x_0)* \pi_1(V,x_0)$.
|
||||
|
||||
Let $N$ be the **least normal subgroup** in the free product $H$, containing $i_1(g)i_2(g)^{-1}$, $\forall g\in \pi_1(U\cap V,x_0)$.
|
||||
|
||||
Note $i_1(g)\in \pi_1(U,x_0)$ and $i_2(g)\in \pi_1(V,x_0)$. You may think of them as $G_1,G_2$ in the free group descriptions.
|
||||
|
||||
#### Seifert-Van Kampen Theorem (classical version)
|
||||
|
||||
There is an isomorphism between $\pi_1(U,x_0)* \pi_1(V,x_0)/N$ and $\pi_1(U\cup V,x_0)$.
|
||||
@@ -31,4 +31,8 @@ export default {
|
||||
Math4202_L23: "Topology II (Lecture 23)",
|
||||
Math4202_L24: "Topology II (Lecture 24)",
|
||||
Math4202_L25: "Topology II (Lecture 25)",
|
||||
Math4202_L26: "Topology II (Lecture 26)",
|
||||
Math4202_L27: "Topology II (Lecture 27)",
|
||||
Math4202_L28: "Topology II (Lecture 28)",
|
||||
Math4202_L29: "Topology II (Lecture 29)",
|
||||
}
|
||||
|
||||
439
content/Math4302/Exam_reviews/Math4302_E2.md
Normal file
439
content/Math4302/Exam_reviews/Math4302_E2.md
Normal file
@@ -0,0 +1,439 @@
|
||||
# Math 4302 Exam 2 Review
|
||||
|
||||
## Groups
|
||||
|
||||
|
||||
### Direct products
|
||||
|
||||
$\mathbb{Z}_m\times \mathbb{Z}_n$ is cyclic if and only if $m$ and $n$ have greatest common divisor $1$.
|
||||
|
||||
More generally, for $\mathbb{Z}_{n_1}\times \mathbb{Z}_{n_2}\times \cdots \times \mathbb{Z}_{n_k}$, if $n_1,n_2,\cdots,n_k$ are pairwise coprime, then the direct product is cyclic.
|
||||
|
||||
|
||||
If $n=p_1^{m_1}\ldots p_k^{m_k}$, where $p_i$ are distinct primes, then the group
|
||||
|
||||
$$
|
||||
G=\mathbb{Z}_n=\mathbb{Z}_{p_1^{m_1}}\times \mathbb{Z}_{p_2^{m_2}}\times \cdots \times \mathbb{Z}_{p_k^{m_k}}
|
||||
$$
|
||||
|
||||
is cyclic.
|
||||
|
||||
### Structure of finitely generated abelian groups
|
||||
|
||||
#### Theorem for finitely generated abelian groups
|
||||
|
||||
Every finitely generated abelian group $G$ is isomorphic to
|
||||
|
||||
$$
|
||||
Z_{p_1}^{n_1}\times Z_{p_2}^{n_2}\times \cdots \times Z_{p_k}^{n_k}\times\underbrace{\mathbb{Z}\times \ldots \times \mathbb{Z}}_{m\text{ times}}
|
||||
$$
|
||||
|
||||
#### Corollary for divisor size of abelian subgroup
|
||||
|
||||
If $g$ is abelian and $|G|=n$, then for every divisor $m$ of $n$, $G$ has a subgroup of order $m$.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> This is not true if $G$ is not abelian.
|
||||
>
|
||||
> Consider $A_4$ (alternating group for $S_4$) does not have a subgroup of order 6.
|
||||
|
||||
|
||||
### Cosets
|
||||
|
||||
#### Definition of Cosets
|
||||
|
||||
Let $G$ be a group and $H$ its subgroup.
|
||||
|
||||
Define a relation on $G$ and $a\sim b$ if $a^{-1}b\in H$.
|
||||
|
||||
This is an equivalence relation.
|
||||
|
||||
- Reflexive: $a\sim a$: $a^{-1}a=e\in H$
|
||||
- Symmetric: $a\sim b\Rightarrow b\sim a$: $a^{-1}b\in H$, $(a^{-1}b)^{-1}=b^{-1}a\in H$
|
||||
- Transitive: $a\sim b$ and $b\sim c\Rightarrow a\sim c$ : $a^{-1}b\in H, b^{-1}c\in H$, therefore their product is also in $H$, $(a^{-1}b)(b^{-1}c)=a^{-1}c\in H$
|
||||
|
||||
So we get a partition of $G$ to equivalence classes.
|
||||
|
||||
Let $a\in G$, the equivalence class containing $a$
|
||||
|
||||
$$
|
||||
aH=\{x\in G| a\sim x\}=\{x\in G| a^{-1}x\in H\}=\{x|x=ah\text{ for some }h\in H\}
|
||||
$$
|
||||
|
||||
This is called the coset of $a$ in $H$.
|
||||
|
||||
#### Definition of Equivalence Class
|
||||
|
||||
Let $a\in H$, and the equivalence class containing $a$ is defined as:
|
||||
|
||||
$$
|
||||
aH=\{x|a\simeq x\}=\{x|a^{-1}x\in H\}=\{x|x=ah\text{ for some }h\in H\}
|
||||
$$
|
||||
|
||||
#### Properties of Equivalence Class
|
||||
|
||||
$aH=bH$ if and only if $a\sim b$.
|
||||
|
||||
#### Lemma for size of cosets
|
||||
|
||||
Any coset of $H$ has the same cardinality as $H$.
|
||||
|
||||
Define $\phi:H\to aH$ by $\phi(h)=ah$.
|
||||
|
||||
$\phi$ is an bijection, if $ah=ah'\implies h=h'$, it is onto by definition of $aH$.
|
||||
|
||||
#### Corollary: Lagrange's Theorem
|
||||
|
||||
If $G$ is a finite group, and $H\leq G$, then $|H|\big\vert |G|$. (size of $H$ divides size of $G$)
|
||||
|
||||
### Normal Subgroups
|
||||
|
||||
#### Definition of Normal Subgroup
|
||||
|
||||
A subgroup $H\leq G$ is called a normal subgroup if $aH=Ha$ for all $a\in G$. We denote it by $H\trianglelefteq G$
|
||||
|
||||
|
||||
#### Lemma for equivalent definition of normal subgroup
|
||||
|
||||
The following are equivalent:
|
||||
|
||||
1. $H\trianglelefteq G$
|
||||
2. $aHa^{-1}=H$ for all $a\in G$
|
||||
3. $aHa^{-1}\subseteq H$ for all $a\in G$, that is $aha^{-1}\in H$ for all $a\in G$
|
||||
|
||||
### Factor group
|
||||
|
||||
Consider the operation on the set of left coset of $G$, denoted by $S$. Define
|
||||
|
||||
$$
|
||||
(aH)(bH)=abH
|
||||
$$
|
||||
|
||||
#### Condition for operation
|
||||
|
||||
The operation above is well defined if and only if $H\trianglelefteq G$.
|
||||
|
||||
#### Definition of factor (quotient) group
|
||||
|
||||
If $H\trianglelefteq G$, then the set of cosets with operation:
|
||||
|
||||
$$
|
||||
(aH)(bH)=abH
|
||||
$$
|
||||
|
||||
is a group denoted by $G/H$. This group is called the quotient group (or factor group) of $G$ by $H$.
|
||||
|
||||
#### Fundamental homomorphism theorem (first isomorphism theorem)
|
||||
|
||||
If $\phi:G\to G'$ is a homomorphism, then the function $f:G/\ker(\phi)\to \phi(G)$, ($\phi(G)\subseteq G'$) given by $f(a\ker(\phi))=\phi(a)$, $\forall a\in G$, is an well-defined isomorphism.
|
||||
|
||||
> - If $G$ is abelian, $N\leq G$, then $G/N$ is abelian.
|
||||
> - If $G$ is finitely generated and $N\trianglelefteq G$, then $G/N$ is finitely generated.
|
||||
|
||||
#### Definition of simple group
|
||||
|
||||
$G$ is simple if $G$ has no proper ($H\neq G,\{e\}$), normal subgroup.
|
||||
|
||||
### Center of a group
|
||||
|
||||
Recall from previous lecture, the center of a group $G$ is the subgroup of $G$ that contains all elements that commute with all elements in $G$.
|
||||
|
||||
$$
|
||||
Z(G)=\{a\in G\mid \forall g\in G, ag=ga\}
|
||||
$$
|
||||
|
||||
this subgroup is normal and measure the "abelian" for a group.
|
||||
|
||||
#### Definition of the commutator of a group
|
||||
|
||||
Let $G$ be a group and $a,b\in G$, the commutator $[a,b]$ is defined as $aba^{-1}b^{-1}$.
|
||||
|
||||
$[a,b]=e$ if and only if $a$ and $b$ commute.
|
||||
|
||||
Some additional properties:
|
||||
|
||||
- $[a,b]^{-1}=[b,a]$
|
||||
|
||||
#### Definition of commutator subgroup
|
||||
|
||||
Let $G'$ be the subgroup of $G$ generated by all commutators of $G$.
|
||||
|
||||
$$
|
||||
G'=\{[a_1,b_1][a_2,b_2]\ldots[a_n,b_n]\mid a_1,a_2,\ldots,a_n,b_1,b_2,\ldots,b_n\in G\}
|
||||
$$
|
||||
|
||||
Then $G'$ is the subgroup of $G$.
|
||||
|
||||
- Identity: $[e,e]=e$
|
||||
- Inverse: $([a_1,b_1],\ldots,[a_n,b_n])^{-1}=[b_n,a_n],\ldots,[b_1,a_1]$
|
||||
|
||||
Some additional properties:
|
||||
|
||||
- $G$ is abelian if and only if $G'=\{e\}$
|
||||
- $G'\trianglelefteq G$
|
||||
- $G/G'$ is abelian
|
||||
- If $N$ is a normal subgroup of $G$, and $G/N$ is abelian, then $G'\leq N$.
|
||||
|
||||
### Group acting on a set
|
||||
|
||||
#### Definition for group acting on a set
|
||||
|
||||
Let $G$ be a group, $X$ be a set, $X$ is a $G$-set or $G$ acts on $X$ if there is a map
|
||||
|
||||
$$
|
||||
G\times X\to X
|
||||
$$
|
||||
$$
|
||||
(g,x)\mapsto g\cdot x\, (\text{ or simply }g(x))
|
||||
$$
|
||||
|
||||
such that
|
||||
|
||||
1. $e\cdot x=x,\forall x\in X$
|
||||
2. $g_2\cdot(g_1\cdot x)=(g_2 g_1)\cdot x$
|
||||
|
||||
#### Group action is a homomorphism
|
||||
|
||||
Let $X$ be a $G$-set, $g\in G$, then the function
|
||||
|
||||
$$
|
||||
\sigma_g:X\to X,x\mapsto g\cdot x
|
||||
$$
|
||||
|
||||
is a bijection, and the function $\phi:G\to S_X, g\mapsto \sigma_g$ is a group homomorphism.
|
||||
|
||||
|
||||
#### Definition of orbits
|
||||
|
||||
We define the equivalence relation on $X$
|
||||
|
||||
$$
|
||||
x\sim y\iff y=g\cdot x\text{ for some }g
|
||||
$$
|
||||
|
||||
So we get a partition of $X$ into equivalence classes: orbits
|
||||
|
||||
$$
|
||||
Gx\coloneqq \{g\cdot x|g\in G\}=\{y\in X|x\sim y\}
|
||||
$$
|
||||
|
||||
is the orbit of $X$.
|
||||
|
||||
$x,y\in X$ either $Gx=Gy$ or $Gx\cap Gy=\emptyset$.
|
||||
|
||||
$X=\bigcup_{x\in X}Gx$.
|
||||
|
||||
#### Definition of isotropy subgroup
|
||||
|
||||
Let $X$ be a $G$-set, the stabilizer (or isotropy subgroup) corresponding to $x\in X$ is
|
||||
|
||||
$$
|
||||
G_x=\{g\in G|g\cdot x=x\}
|
||||
$$
|
||||
|
||||
$G_x$ is a subgroup of $G$. $G_x\leq G$.
|
||||
|
||||
- $e\cdot x=x$, so $e\in G_x$
|
||||
- If $g_1,g_2\in G_x$, then $(g_1g_2)\cdot x=g_1\cdot(g_2\cdot x)=g_1 \cdot x$, so $g_1g_2\in G_x$
|
||||
- If $g\in G_x$, then $g^{-1}\cdot g=x=g^{-1}\cdot x$, so $g^{-1}\in G_x$
|
||||
|
||||
#### Orbit-stabilizer theorem
|
||||
|
||||
If $X$ is a $G$-set and $x\in X$, then
|
||||
|
||||
$$
|
||||
|Gx|=(G:G_x)=\text{ number of left cosets of }G_x=\frac{|G|}{|G_x|}
|
||||
$$
|
||||
|
||||
#### Theorem for orbit with prime power groups
|
||||
|
||||
Suppose $X$ is a $G$-set, and $|G|=p^n$ for some prime $p$. Let $X_G$ be the set of all elements in $X$ whose orbit has size $1$. (Recall the orbit divides $X$ into disjoint partitions.) Then $|X|\equiv |X_G|\mod p$.
|
||||
|
||||
#### Corollary: Cauchy's theorem
|
||||
|
||||
If $p$ is prime and $p|(|G|)$, then $G$ has a subgroup of order $p$.
|
||||
|
||||
> This does not hold when $p$ is not prime.
|
||||
>
|
||||
> Consider $A_4$ with order $12$, and $A_4$ has no subgroup of order $6$.
|
||||
|
||||
#### Corollary: Center of prime power group is non-trivial
|
||||
|
||||
If $|G|=p^m$, then $Z(G)$ is non-trivial. ($Z(G)\neq \{e\}$)
|
||||
|
||||
#### Proposition: Prime square group is abelian
|
||||
|
||||
If $|G|=p^2$, where $p$ is a prime, then $G$ is abelian.
|
||||
|
||||
|
||||
### Classification of small order
|
||||
|
||||
Let $G$ be a group
|
||||
|
||||
- $|G|=1$
|
||||
- $G=\{e\}$
|
||||
- $|G|=2$
|
||||
- $G\simeq\mathbb{Z}_2$ (prime order)
|
||||
- $|G|=3$
|
||||
- $G\simeq\mathbb{Z}_3$ (prime order)
|
||||
- $|G|=4$
|
||||
- $G\simeq\mathbb{Z}_2\times \mathbb{Z}_2$
|
||||
- $G\simeq\mathbb{Z}_4$
|
||||
- $|G|=5$
|
||||
- $G\simeq\mathbb{Z}_5$ (prime order)
|
||||
- $|G|=6$
|
||||
- $G\simeq S_3$
|
||||
- $G\simeq\mathbb{Z}_3\times \mathbb{Z}_2\simeq \mathbb{Z}_6$
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
$|G|$ has an element of order $2$, namely $b$, and an element of order $3$, namely $a$.
|
||||
|
||||
So $e,a,a^2,b,ba,ba^2$ are distinct.
|
||||
|
||||
Therefore, there are only two possibilities for value of $ab$. ($a,a^2$ are inverse of each other, $b$ is inverse of itself.)
|
||||
|
||||
If $ab=ba$, then $G$ is abelian, then $G\simeq \mathbb{Z}_2\times \mathbb{Z}_3$.
|
||||
|
||||
If $ab=ba^2$, then $G\simeq S_3$.
|
||||
</details>
|
||||
|
||||
- $|G|=7$
|
||||
- $G\simeq\mathbb{Z}_7$ (prime order)
|
||||
- $|G|=8$
|
||||
- $G\simeq\mathbb{Z}_2\times \mathbb{Z}_2\times \mathbb{Z}_2$
|
||||
- $G\simeq\mathbb{Z}_4\times \mathbb{Z}_2$
|
||||
- $G\simeq\mathbb{Z}_8$
|
||||
- $G\simeq D_4$
|
||||
- $G\simeq$ quaternion group $\{e,i,j,k,-1,-i,-j,-k\}$ where $i^2=j^2=k^2=-1$, $(-1)^2=1$. $ij=l$, $jk=i$, $ki=j$, $ji=-k$, $kj=-i$, $ik=-j$.
|
||||
- $|G|=9$
|
||||
- $G\simeq\mathbb{Z}_3\times \mathbb{Z}_3$
|
||||
- $G\simeq\mathbb{Z}_9$ (apply the corollary, $9=3^2$, these are all the possible cases)
|
||||
- $|G|=10$
|
||||
- $G\simeq\mathbb{Z}_5\times \mathbb{Z}_2\simeq \mathbb{Z}_{10}$
|
||||
- $G\simeq D_5$
|
||||
- $|G|=11$
|
||||
- $G\simeq\mathbb{Z}_11$ (prime order)
|
||||
- $|G|=12$
|
||||
- $G\simeq\mathbb{Z}_3\times \mathbb{Z}_4$
|
||||
- $G\simeq\mathbb{Z}_2\times \mathbb{Z}_2\times \mathbb{Z}_3$
|
||||
- $A_4$
|
||||
- $D_6\simeq S_3\times \mathbb{Z}_2$
|
||||
- ??? One more
|
||||
- $|G|=13$
|
||||
- $G\simeq\mathbb{Z}_{13}$ (prime order)
|
||||
- $|G|=14$
|
||||
- $G\simeq\mathbb{Z}_2\times \mathbb{Z}_7$
|
||||
- $G\simeq D_7$
|
||||
|
||||
|
||||
#### Lemma for group of order $2p$ where $p$ is prime
|
||||
|
||||
If $p$ is prime, $p\neq 2$, and $|G|=2p$, then $G$ is either abelian $\simeq \mathbb{Z}_2\times \mathbb{Z}_p$ or $G\simeq D_p$
|
||||
|
||||
## Ring
|
||||
|
||||
|
||||
### Definition of ring
|
||||
|
||||
A ring is a set $R$ with binary operation $+$ and $\cdot$ such that:
|
||||
|
||||
- $(R,+)$ is an abelian group.
|
||||
- Multiplication is associative: $(a\cdot b)\cdot c=a\cdot (b\cdot c)$.
|
||||
- Distribution property: $a\cdot (b+c)=a\cdot b+a\cdot c$, $(b+c)\cdot a=b\cdot a+c\cdot a$. (Note that $\cdot$ may not be abelian, may not even be a group, therefore we need to distribute on both sides.)
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> $a\cdot b=ab$ will be used for the rest of the sections.
|
||||
|
||||
#### Properties of rings
|
||||
|
||||
Let $0$ denote the identity of addition of $R$. $-a$ denote the additive inverse of $a$.
|
||||
|
||||
- $0\cdot a=a\cdot 0=0$
|
||||
- $(-a)b=a(-b)=-(ab)$, $\forall a,b\in R$
|
||||
- $(-a)(-b)=ab$, $\forall a,b\in R$
|
||||
|
||||
#### Definition of commutative ring
|
||||
|
||||
A ring $(R,+,\cdot)$ is commutative if $a\cdot b=b\cdot a$, $\forall a,b\in R$.
|
||||
|
||||
#### Definition of unity element
|
||||
|
||||
A ring $R$ has unity element if there is an element $1\in R$ such that $a\cdot 1=1\cdot a=a$, $\forall a\in R$.
|
||||
|
||||
#### Definition of unit
|
||||
|
||||
Suppose $R$ is a ring with unity element. An element $a\in R$ is called a unit if there is $b\in R$ such that $a\cdot b=b\cdot a=1$.
|
||||
|
||||
In this case $b$ is called the inverse of $a$.
|
||||
|
||||
#### Definition of division ring
|
||||
|
||||
If every $a\neq 0$ in $R$ has a multiplicative inverse (is a unit), then $R$ is called a division ring.
|
||||
|
||||
#### Definition of field
|
||||
|
||||
A commutative division ring is called a field.
|
||||
|
||||
#### Units in $\mathbb{Z}_n$ is coprime to $n$
|
||||
|
||||
More generally, $[m]\in \mathbb{Z}_n$ is a unit if and only if $\operatorname{gcd}(m,n)=1$.
|
||||
|
||||
### Integral Domains
|
||||
|
||||
#### Definition of zero divisors
|
||||
|
||||
If $a,b\in R$ with $a,b\neq 0$ and $ab=0$, then $a,b$ are called zero divisors.
|
||||
|
||||
#### Zero divisors in $\mathbb{Z}_n$
|
||||
|
||||
$[m]\in \mathbb{Z}_n$ is a zero divisor if and only if $\operatorname{gcd}(m,n)>1$ ($m$ is not a unit).
|
||||
|
||||
#### Corollaries of integral domain
|
||||
|
||||
If $R$ is a integral domain, then we have cancellation property $ab=ac,a\neq 0\implies b=c$.
|
||||
|
||||
#### Units with multiplication forms a group
|
||||
|
||||
If $R$ is a ring with unity, then the units in $R$ forms a group under multiplication.
|
||||
|
||||
### Fermat’s and Euler’s Theorems
|
||||
|
||||
#### Fermat’s little theorem
|
||||
|
||||
If $p$ is not a divisor of $m$, then $m^{p-1}\equiv 1\mod p$.
|
||||
|
||||
#### Corollary of Fermat’s little theorem
|
||||
|
||||
If $m\in \mathbb{Z}$, then $m^p\equiv m\mod p$.
|
||||
|
||||
#### Euler’s totient function
|
||||
|
||||
Consider $\mathbb{Z}_6$, by definition for the group of units, $\mathbb{Z}_6^*=\{1,5\}$.
|
||||
|
||||
$$
|
||||
\phi(n)=|\mathbb{Z}_n^*|=|\{1\leq x\leq n:gcd(x,n)=1\}|
|
||||
$$
|
||||
|
||||
#### Euler’s Theorem
|
||||
|
||||
If $m\in \mathbb{Z}$, and $gcd(m,n)=1$, then $m^{\phi(n)}\equiv 1\mod n$.
|
||||
|
||||
#### Theorem for existence of solution of modular equations
|
||||
|
||||
$ax\equiv b\mod n$ has a solution if and only if $d=\operatorname{gcd}(a,n)|b$ And if there is a solution, then there are exactly $d$ solutions in $\mathbb{Z}_n$.
|
||||
|
||||
### Ring homomorphisms
|
||||
|
||||
#### Definition of ring homomorphism
|
||||
|
||||
Let $R,S$ be two rings, $f:R\to S$ is a ring homomorphism if $\forall a,b\in R$,
|
||||
|
||||
- $f(a+b)=f(a)+f(b)\implies f(0)=0, f(-a)=-f(a)$
|
||||
- $f(ab)=f(a)f(b)$
|
||||
|
||||
#### Definition of ring isomorphism
|
||||
|
||||
If $f$ is a ring homomorphism and a bijection, then $f$ is called a ring isomorphism.
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Rings
|
||||
|
||||
### Integral Domains
|
||||
### Fermat’s and Euler’s Theorems
|
||||
|
||||
Recall from last lecture, we consider $\mathbb{Z}_p$ and $\mathbb{Z}_p^*$ denote the group of units in $\mathbb{Z}_p$ with multiplication.
|
||||
|
||||
@@ -79,7 +79,7 @@ $\phi(8)=|\{1,3,5,7\}|=4$
|
||||
|
||||
If $[a]\in \mathbb{Z}_n^*$, then $[a]^{\phi(n)}=[1]$. So $a^{\phi(n)}\equiv 1\mod n$.
|
||||
|
||||
#### Theorem
|
||||
#### Euler’s Theorem
|
||||
|
||||
If $m\in \mathbb{Z}$, and $gcd(m,n)=1$, then $m^{\phi(n)}\equiv 1\mod n$.
|
||||
|
||||
@@ -104,7 +104,7 @@ Solution for $2x\equiv 1\mod 3$
|
||||
|
||||
So solution for $2x\equiv 1\mod 3$ is $\{3k+2|k\in \mathbb{Z}\}$.
|
||||
|
||||
#### Theorem for solving modular equations
|
||||
#### Theorem for existence of solution of modular equations
|
||||
|
||||
$ax\equiv b\mod n$ has a solution if and only if $\operatorname{gcd}(a,n)|b$ and in that case the equation has $d$ solutions in $\mathbb{Z}_n$.
|
||||
|
||||
|
||||
126
content/Math4302/Math4302_L27.md
Normal file
126
content/Math4302/Math4302_L27.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# Math4302 Modern Algebra (Lecture 27)
|
||||
|
||||
## Rings
|
||||
|
||||
### Fermat’s and Euler’s Theorems
|
||||
|
||||
Recall from last lecture, $ax\equiv b \mod n$, if $x\equiv y\mod n$, then $x$ is a solution if and only if $y$ is a solution.
|
||||
|
||||
#### Theorem for existence of solution of modular equations
|
||||
|
||||
$ax\equiv b\mod n$ has a solution if and only if $d=\operatorname{gcd}(a,n)|b$ And if there is a solution, then there are exactly $d$ solutions in $\mathbb{Z}_n$.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
For the forward direction, we proved if $ax\equiv b\mod n$ then $ax-b=ny$, $y\in\mathbb{Z}$.
|
||||
|
||||
then $b=ax-ny$, $d|(ax-ny)$ implies that $d|b$.
|
||||
|
||||
---
|
||||
|
||||
For the backward direction, assume $d=\operatorname{gcd}(a,n)=1$. Then we need to show, there is exactly $1$ solution between $0$ and $n-1$.
|
||||
|
||||
If $ax\equiv b\mod n$, then in $\mathbb{Z}_n$, $[a][x]=[b]$. (where $[a]$ denotes the remainder of $a$ by $n$ and $[b]$ denotes the remainder of $b$ by $n$)
|
||||
|
||||
Since $\operatorname{gcd}(a,n)=1$, then $[a]$ is a unit in $\mathbb{Z}_n$, so we can multiply the above equation by the inverse of $[a]$. and get $[x]=[a]^{-1}[b]$.
|
||||
|
||||
Now assume $d=\operatorname{gcd}(a,n)$ where $n$ is arbitrary. Then $a=a'd$, then $n=n'd$, with $\operatorname{gcd}(a',n')=1$.
|
||||
|
||||
Also $d|b$ so $b=b'd$. So
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
ax\equiv b \mod n&\iff n|(ax-b)\\
|
||||
&\iff n'd|(a'dx-b'd)\\
|
||||
&\iff n'|(a'x-b')\\
|
||||
&\iff a'x\equiv b'\mod n'
|
||||
\end{aligned}
|
||||
$$.
|
||||
|
||||
Since $\operatorname{gcd}(a',n')=1$, there is a unique solution $x_0\in \mathbb{Z}_{n'}$. $0\leq x_0\leq n'+1$. Other solution in $\mathbb{Z}$ are of the form $x_0+kn'$ for $k\in \mathbb{Z}$.
|
||||
|
||||
And there will be $d$ solutions in $\mathbb{Z}_n$,
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Examples</summary>
|
||||
|
||||
Solve $12x\equiv 25\mod 7$.
|
||||
|
||||
$12\equiv 5\mod 7$, $25\equiv 4\mod 7$. So the equation becomes $5x\equiv 4\mod 7$.
|
||||
|
||||
$[5]^{-1}=3\in \mathbb{Z}_7$, so $[5][x]\equiv [4]$ implies $[x]\equiv [3][4]\equiv [5]\mod 7$.
|
||||
|
||||
So solution in $\mathbb{Z}$ is $\{5+7k:k\in \mathbb{Z}\}$.
|
||||
|
||||
---
|
||||
|
||||
Solve $6x\equiv 32\mod 20$.
|
||||
|
||||
$\operatorname{gcd}(6,20)=2$, so $6x\equiv 12\mod 20$ if and only if $3x\equiv 6\mod 10$.
|
||||
|
||||
$[3]^{-1}=[7]\in \mathbb{Z}_{10}$, so $[3][x]\equiv [6]$ implies $[x]\equiv [7][6]\equiv [2]\mod 10$.
|
||||
|
||||
So solution in $\mathbb{Z}_{20}$ is $[2]$ and $[12]$
|
||||
|
||||
So solution in $\mathbb{Z}$ is $\{2+10k:k\in \mathbb{Z}\}$
|
||||
|
||||
</details>
|
||||
|
||||
### Ring homomorphisms
|
||||
|
||||
#### Definition of ring homomorphism
|
||||
|
||||
Let $R,S$ be two rings, $f:R\to S$ is a ring homomorphism if $\forall a,b\in R$,
|
||||
|
||||
- $f(a+b)=f(a)+f(b)\implies f(0)=0, f(-a)=-f(a)$
|
||||
- $f(ab)=f(a)f(b)$
|
||||
|
||||
#### Definition of ring isomorphism
|
||||
|
||||
If $f$ is a ring homomorphism and a bijection, then $f$ is called a ring isomorphism.
|
||||
|
||||
<details>
|
||||
<summary>Example</summary>
|
||||
Let $f:(\mathbb{Z},+,\times)\to(2\mathbb{Z},+,\times)$ by $f(a)=2a$.
|
||||
|
||||
Is not a ring homomorphism since $f(ab)\neq f(a)f(b)$ in general.
|
||||
|
||||
---
|
||||
|
||||
Let $f:(\mathbb{Z},+,\times)\to(\mathbb{Z}_n,+,\times)$ by $f(a)=a\mod n$
|
||||
|
||||
Is a ring homomorphism.
|
||||
|
||||
</details>
|
||||
|
||||
### Integral domains and their file fo fractions.
|
||||
|
||||
Let $R$ be an integral domain: (i.e. $R$ is commutative with unity and no zero divisors).
|
||||
|
||||
#### Definition of field of fractions
|
||||
|
||||
If $R$ is an integral domain, we can construct a field containing $R$ called the field of fractions (or called field of quotients) of $R$.
|
||||
|
||||
$$
|
||||
S=\{(a,b)|a,b\in R, b\neq 0\}
|
||||
$$
|
||||
|
||||
a relation on $S$ is defined as follows:
|
||||
|
||||
$(a,b)\sim (c,d)$ if and only if $ad=bc$.
|
||||
|
||||
<details>
|
||||
<summary>This equivalence relation is well defined</summary>
|
||||
|
||||
- Reflectivity: $(a,b)\sim (a,b)$ $ab=ab$
|
||||
- Symmetry: $(a,b)\sim (c,d)\Rightarrow (c,d)\sim (a,b)$
|
||||
- Transitivity: $(a,b)\sim (c,d)$ and $(c,d)\sim (e,f)\Rightarrow (a,b)\sim (e,f)$
|
||||
- $ad=bc$, and $cf=ed$, we want to conclude that $af=be$. since $ad=bc$, then $adf=bcf$, since $cf=ed$, then $cfb=edb$, therefore $adf=edb$.
|
||||
- Then $d(af-be)=0$ since $d\neq 0$ then $af=be$.
|
||||
|
||||
</details>
|
||||
|
||||
Then $S/\sim$ is a field.
|
||||
153
content/Math4302/Math4302_L28.md
Normal file
153
content/Math4302/Math4302_L28.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# Math4302 Modern Algebra (Lecture 28)
|
||||
|
||||
## Rings
|
||||
|
||||
### Field of quotients
|
||||
|
||||
Let $R$ be an integral domain ($R$ has unity and commutative with no zero divisors).
|
||||
|
||||
Consider the pair $S=\{(a,b)|a,b\in R, b\neq 0\}$.
|
||||
|
||||
And define the equivalence relation on $S$ as follows:
|
||||
|
||||
$(a,b)\sim (c,d)$ if and only if $ad=bc$.
|
||||
|
||||
We denote $[(a,b)]$ as set of all elements in $S$ equivalent to $(a,b)$.
|
||||
|
||||
Let $F$ be the set of all equivalent classes. We define addition and multiplication on $F$ as follows:
|
||||
|
||||
$$
|
||||
[(a,b)]+[(c,d)]=[(ad+bc,bd)]
|
||||
$$
|
||||
|
||||
$$
|
||||
[(a,b)]\cdot[(c,d)]=[(ac,bd)]
|
||||
$$
|
||||
|
||||
<details>
|
||||
<summary>The multiplication and addition is well defined </summary>
|
||||
|
||||
Addition:
|
||||
|
||||
If $(a,b)\sim (a',b')$, and $(c,d)\sim (c',d')$, then we want to show that $(ad+bc,bd)\sim (a'd+c'd,b'd)$.
|
||||
|
||||
Since $(a,b)\sim (a',b')$, then $ab'=a'b$; $(c,d)\sim (c',d')$, then $cd'=dc'$,
|
||||
|
||||
So $ab'dd'=a'bdd'$, and $cd'bb'=dc'bb'$.
|
||||
|
||||
$adb'd'+bcb'd'=a'd'bd+b'c'bd$, therefore $(ad+bc,bd)\sim (a'd+c'd,b'd)$.
|
||||
|
||||
---
|
||||
|
||||
Multiplication:
|
||||
|
||||
If $(a,b)\sim (a',b')$, and $(c,d)\sim (c',d')$, then we want to show that $(ac,bd)\sim (a'c',b'd')$.
|
||||
|
||||
Since $(a,b)\sim (a',b')$, then $ab'=a'b$; $(c,d)\sim (c',d')$, then $cd'=dc'$, so $(ac,bd)\sim (a'c',b'd')$
|
||||
|
||||
</details>
|
||||
|
||||
#### Claim (F,+,*) is a field
|
||||
|
||||
- additive identity: $(0,1)\in F$
|
||||
- additive inverse: $(a,b)\in F$, then $(-a,b)\in F$ and $(-a,b)+(a,b)=(0,1)\in F$
|
||||
- additive associativity: bit long.
|
||||
|
||||
- multiplicative identity: $(1,1)\in F$
|
||||
- multiplicative inverse: $[(a,b)]$ is non zero if and only if $a\neq 0$, then $a^{-1}=[(b,a)]\in F$.
|
||||
- multiplicative associativity: bit long
|
||||
|
||||
- distributivity: skip, too long.
|
||||
|
||||
Such field is called a quotient field of $R$.
|
||||
|
||||
And $F$ contains $R$ by $\phi:R\to F$, $\phi(a)=[(a,1)]$.
|
||||
|
||||
This is a ring homomorphism.
|
||||
|
||||
- $\phi(a+b)=[(a+b,1)]=[(a,1)][(b,1)]\phi(a)+\phi(b)$
|
||||
- $\phi(ab)=[(ab,1)]=[(a,1)][(b,1)]\phi(a)\phi(b)$
|
||||
|
||||
and $\phi$ is injective.
|
||||
|
||||
If $\phi(a)=\phi(b)$, then $a=b$.
|
||||
|
||||
<details>
|
||||
<summary>Example</summary>
|
||||
|
||||
Let $D\subset \mathbb R$ and
|
||||
|
||||
$$
|
||||
\mathbb Z \subset D\coloneqq \{a+b\sqrt{2}:a,b\in \mathbb Z\}
|
||||
$$
|
||||
|
||||
Then $D$ is a subring of $\mathbb R$, and integral domain, with usual addition and multiplication.
|
||||
|
||||
$$
|
||||
(a+b\sqrt{2})(c+d\sqrt{2})=(ac+2bd)+(ad+bc)\sqrt{2}
|
||||
$$
|
||||
|
||||
$$
|
||||
-(a+b\sqrt{2})=(-a)+(-b)\sqrt{2})
|
||||
$$
|
||||
|
||||
...
|
||||
|
||||
$D$ is a integral domain since $\mathbb R$ has no zero divisors, therefore $D$ has no zero divisors.
|
||||
|
||||
Consider the field of quotients of $D$. $[(a+b\sqrt{2},c+d\sqrt{2})]$. This is isomorphic to $\mathbb Q(\sqrt2)=\{r+s\sqrt{2}:r,s\in \mathbb Q\}$
|
||||
|
||||
$$
|
||||
m+n\sqrt{2}=\frac{m}{n}+\frac{m'}{n'}\sqrt{2}\mapsto [(mn'+nm'\sqrt{2},nn')]
|
||||
$$
|
||||
|
||||
And use rationalization on the forward direction.
|
||||
|
||||
</details>
|
||||
|
||||
#### Polynomial rings
|
||||
|
||||
Let $R$ be a ring, a polynomial with coefficients in $R$ is a sum
|
||||
|
||||
$$
|
||||
a_0+a_1x+\cdots+a_nx^n
|
||||
$$
|
||||
|
||||
where $a_i\in R$. $x$ is indeterminate, $a_0,a_1,\cdots,a_n$ are called coefficients. $a_0$ is the constant term.
|
||||
|
||||
If $f$ is a non-zero polynomial, then the degree of $f$ is defined as the largest $n$ such that $a_n\neq 0$.
|
||||
|
||||
<details>
|
||||
<summary>Example</summary>
|
||||
|
||||
Let $f=1+2x+0x^2-1x^3+0x^4$, then $deg f=3$
|
||||
|
||||
</details>
|
||||
|
||||
If $R$ has a unity $1$, then we write $x^m$ instead of $1x^m$.
|
||||
|
||||
Let $R[x]$ denote the set of all polynomials with coefficients in $R$.
|
||||
|
||||
We define multiplication and addition on $R[x]$.
|
||||
|
||||
$f:a_0+a_1x+\cdots+a_nx^n$
|
||||
|
||||
$g:b_0+b_1x+\cdots+b_mx^m$
|
||||
|
||||
Define,
|
||||
|
||||
$$
|
||||
f+g=a_0+b_0+a_1x+b_1x+\cdots+a_nx^n+b_mx^m
|
||||
$$
|
||||
|
||||
$$
|
||||
fg=(a_0b_0)+(a_1b_0)x+\cdots+(a_nb_m)x^m
|
||||
$$
|
||||
|
||||
In general, the coefficient of $x^m=\sum_{i=0}^{m}a_ix^{m-i}$.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> The field $R$ may not be commutative, follow the order of computation matters.
|
||||
|
||||
We will show that this is a ring and explore additional properties.
|
||||
145
content/Math4302/Math4302_L29.md
Normal file
145
content/Math4302/Math4302_L29.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# Math4302 Modern Algebra (Lecture 29)
|
||||
|
||||
## Rings
|
||||
|
||||
### Polynomial Rings
|
||||
|
||||
$$
|
||||
R[x]=\{a_0+a_1x+\cdots+a_nx^n:a_0,a_1,\cdots,a_n\in R,n>1\}
|
||||
$$
|
||||
|
||||
Then $(R[x],+,\cdot )$ is a ring.
|
||||
|
||||
If $R$ has a unity $1$, then $R[x]$ has a unity $1$.
|
||||
|
||||
If $R$ is commutative, then $(R[x],+,\cdot )$ is commutative.
|
||||
|
||||
#### Definition of evaluation map
|
||||
|
||||
Let $F$ be a field, and $F[x]$. Fix $\alpha\in F$. $\phi_\alpha:F[x]\to F$ defined by $f(x)\mapsto f(\alpha)$ (the evaluation map).
|
||||
|
||||
Then $\phi_\alpha$ is a ring homomorphism. $\forall f,g\in F[x]$,
|
||||
|
||||
- $(f+g)(\alpha)=f(\alpha)+g(\alpha)$
|
||||
- $(fg)(\alpha)=f(\alpha)g(\alpha)$ (use commutativity of $\cdot$ of $F$, $f(\alpha)g(\alpha)=\sum_{k=0}^{n+m}c_k x^k$, where $c_k=\sum_{i=0}^k a_ib_{k-i}$)
|
||||
|
||||
#### Definition of roots
|
||||
|
||||
Let $\alpha\in F$ is zero (or root) of $f\in F[x]$, if $f(\alpha)=0$.
|
||||
|
||||
<details>
|
||||
<summary>Example</summary>
|
||||
|
||||
$f(x)=x^3-x, F=\mathbb{Z}_3$
|
||||
|
||||
$f(0)=f(1)=0$, $f(2)=8-2=2-2=0$
|
||||
|
||||
but note that $f(x)$ is not zero polynomial $f(x)=0$, but all the evaluations are zero.
|
||||
|
||||
</details>
|
||||
|
||||
#### Factorization of polynomials
|
||||
|
||||
Division algorithm. Let $F$ be a field, $f(x),g(x)\in F[x]$ with $g(x)$ non-zero. Then there are unique polynomials $q(x),r(x)\in F[x]$ such that
|
||||
|
||||
$f(x)=q(x)g(x)+r(x)$
|
||||
|
||||
where $f(x)=a_0+a_1x+\cdots+a_nx^n$ and $g(x)=b_0+b_1x+\cdots+b_mx^m$, $r(x)=c_0+c_1x+\cdots+c_tx^t$, and $a^n,b^m,c^t\neq 0$.
|
||||
|
||||
$r(x)$ is the zero polynomial or $\deg r(x)<\deg g(x)$.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
Uniqueness: exercise
|
||||
|
||||
---
|
||||
|
||||
Existence:
|
||||
|
||||
Let $S=\{f(x)-h(x)g(x):h(x)\in F[x]\}$.
|
||||
|
||||
If $0\in S$, then we are done. Suppose $0\notin S$.
|
||||
|
||||
Let $r(x)$ be the polynomial with smallest degree in $S$.
|
||||
|
||||
$f(x)-h(x)g(x)=r(x)$ implies that $f(x)=h(x)g(x)+r(x)$.
|
||||
|
||||
If $\deg r(x)<\deg g(x)$, then we are done; we set $q(x)=h(x)$.
|
||||
|
||||
If $\deg r(x)\geq\deg g(x)$, we get a contradiction, let $t=\deg r(x)$.
|
||||
|
||||
$m=\deg g(x)$. (so $m\leq t$) Look at $f(x)-(h(x)+\frac{c_t}{b_m}x^{t-m})g(x)$.
|
||||
|
||||
then $f(x)-(h(x)+\frac{c_t}{b_m}x^{t-m})g(x)=f(x)-h(x)g(x)-\frac{c_t}{b_m}x^{t-m}g(x)$.
|
||||
|
||||
And $f(x)-h(x)g(x)=r(x)=c_0+c_1x+\cdots+c_tx^t$, $c_t\neq 0$.
|
||||
|
||||
$\frac{c_t}{b_m}x^{t-m}g(x)=\frac{c_0c_t}{b_m}x^{t-m}+\cdots+c_t x^t$
|
||||
|
||||
That the largest terms cancel, so this gives a polynomial of degree $<t$, which violates that $r(x)$ has smallest degree.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Example</summary>
|
||||
|
||||
$F=\mathbb{Z}_5=\{0,1,2,3,4\}$
|
||||
|
||||
Divide $3x^4+2x^3+x+2$ by $x^2+4$ in $\mathbb{Z}_5[x]$.
|
||||
|
||||
$$
|
||||
3x^4+2x^3+x+2=(3x^3+2x-2)(x^2+4)+3x
|
||||
$$
|
||||
|
||||
So $q(x)=3x^3+2x-2$, $r(x)=3x$.
|
||||
|
||||
</details>
|
||||
|
||||
#### Some corollaries
|
||||
|
||||
$a\in F$ is a zero of $f(x)$ if and only if $(x-a)|f(x)$.
|
||||
|
||||
That is, the remainder of $f(x)$ when divided by $(x-a)$ is zero.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
If $(x-a)|f(x)$, then $f(a)=0$.
|
||||
|
||||
If $f(x)=(x-a)q(x)$, then $f(a)=(a-a)q(a)=0$.
|
||||
|
||||
---
|
||||
|
||||
If $a$ is a zero of $f(x)$, then $f(x)$ is divisible by $(x-a)$.
|
||||
|
||||
We divide $f(x)$ by $(x-a)$.
|
||||
|
||||
$f(x)=q(x)(x-a)+r(x)$, where $r(x)$ is a constant polynomial (by degree of division).
|
||||
|
||||
Evaluate at $f(a)=0=0+r$, therefore $r=0$.
|
||||
|
||||
</details>
|
||||
|
||||
#### Another corollary
|
||||
|
||||
If $f(x)\in F[x]$ and $\deg f(x)=0$, then $f(x)$ has at most $n$ zeros.
|
||||
|
||||
<details>
|
||||
<summary>Proof</summary>
|
||||
|
||||
We proceed by induction on $n$, if $n=1$, this is clear. $ax+b$ have only root $x=-\frac{b}{a}$.
|
||||
|
||||
Suppose $n\geq 2$.
|
||||
|
||||
If $f(x)$ has no zero, done.
|
||||
|
||||
If $f(x)$ has at least $1$ zero, then $f(x)=(x-a)q(x)$ (by our first corollary), where degree of $q(x)$ is $n-1$.
|
||||
|
||||
So zeros of $f(x)=\{a\}\cup$ zeros of $q(x)$, and such set has at most $n$ elements.
|
||||
|
||||
Done.
|
||||
|
||||
</details>
|
||||
|
||||
Preview: How to know if a polynomial is irreducible? (On Friday)
|
||||
@@ -1,5 +1,6 @@
|
||||
export default {
|
||||
index: "Course Description",
|
||||
Exam_reviews: "Exam reviews",
|
||||
"---":{
|
||||
type: 'separator'
|
||||
},
|
||||
@@ -29,4 +30,7 @@ export default {
|
||||
Math4302_L24: "Modern Algebra (Lecture 24)",
|
||||
Math4302_L25: "Modern Algebra (Lecture 25)",
|
||||
Math4302_L26: "Modern Algebra (Lecture 26)",
|
||||
Math4302_L27: "Modern Algebra (Lecture 27)",
|
||||
Math4302_L28: "Modern Algebra (Lecture 28)",
|
||||
Math4302_L29: "Modern Algebra (Lecture 29)",
|
||||
}
|
||||
|
||||
BIN
public/Math4202/Seifert-Van-Kampen-Theorem.png
Normal file
BIN
public/Math4202/Seifert-Van-Kampen-Theorem.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
public/Math4202/universal-covering-of-figure-8.png
Normal file
BIN
public/Math4202/universal-covering-of-figure-8.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Reference in New Issue
Block a user