Beviset for Schröder-Bernstein’s sætning er en vigtig del af setteori og matematikken generelt. Det beskæftiger sig med relationen mellem injektive og surjektive funktioner og giver en måde at konstruere en bijektiv funktion mellem to mængder, når vi har injektive funktioner i begge retninger. Dette er en grundlæggende metode til at vise, at to uendelige mængder har samme kardinalitet.

Schröder-Bernstein sætningen siger, at hvis der eksisterer to funktioner, f:αβf : \alpha \rightarrow \beta og g:βαg : \beta \rightarrow \alpha, hvor ff er injektiv og gg er injektiv, så findes der en bijektiv funktion h:αβh : \alpha \rightarrow \beta. Denne sætning er essentiel, fordi den tillader os at konkludere, at to mængder har samme størrelse (i det matematiske begreb kardinalitet) uden nødvendigvis at finde en eksplicit bijektiv funktion.

For at forstå beviset, skal vi tage udgangspunkt i nogle grundlæggende sætninger og definitioner. Først er det vigtigt at forstå, hvad injektivitet betyder: en funktion ff er injektiv, hvis for alle x1,x2αx_1, x_2 \in \alpha gælder, at f(x1)=f(x2)f(x_1) = f(x_2) kun hvis x1=x2x_1 = x_2. Tilsvarende er en funktion gg injektiv, hvis g(y1)=g(y2)g(y_1) = g(y_2) kun hvis y1=y2y_1 = y_2. Når vi har to sådanne funktioner, kan vi konstruere en bijektiv funktion ved at kombinere de to, med hjælp af den såkaldte "Schröder-Bernstein funktion", hh, der konstrueres ud fra ff og gg.

I første del af beviset overvejes et objekt AA defineret som mængden af elementer, der ikke er i billedet af gg. Den vigtige egenskab ved denne mængde er, at dens komplement er indeholdt i billedet af gg, og derfor kan vi finde et element yy for hver xx i komplementet af AA, sådan at g(y)=xg(y) = x. Dette er et centralt skridt i konstruktionen af den bijektive funktion.

En vigtig del af beviset for injektivitet er, at vi tager to vilkårlige elementer x1x_1 og x2x_2, og antager at h(x1)=h(x2)h(x_1) = h(x_2). Hvis x1x_1 er i AA, så er h(x1)=f(x1)h(x_1) = f(x_1), og ved at analysere hvad der sker med x2x_2, kan vi vise, at x2x_2 også må være i AA, hvilket fører til, at x1=x2x_1 = x_2 via injektiviteten af ff. Hvis x1x_1 og x2x_2 ikke er i AA, kan vi bruge g1g^{ -1} til at konkludere, at x1=x2x_1 = x_2.

Dette viser, at hh er injektiv. Beviset for surjektivitet er lettere at forstå. For et vilkårligt yβy \in \beta overvejer vi, om g(y)g(y) er i AA. Hvis det er tilfældet, kan vi finde et xx i α\alpha sådan at f(x)=yf(x) = y. Hvis g(y)g(y) derimod ikke er i AA, så er h(g(y))=yh(g(y)) = y, og vi har dermed bevist surjektiviteten af hh.

Når både injektiviteten og surjektiviteten er bevist, har vi derfor konstrueret en bijektiv funktion hh, og vi kan afslutte, at de to mængder α\alpha og β\beta har samme kardinalitet.

En vigtig nuance i beviset er brugen af visse beviser og teknikker, såsom sbAux\text{sbAux}-funktionen og taktik som wlog\text{wlog}, der gør det muligt at håndtere symmetri i argumenterne. Det er nødvendigt at være opmærksom på disse detaljer, da de forklarer, hvordan man kan udføre argumenter og sikre sig, at beviset bliver fuldført korrekt.

Et andet aspekt af beviset, der fortjener opmærksomhed, er, at det også viser en generel metode til at konstruere bijektive funktioner, når man har injektive funktioner mellem to mængder. Denne metode kan anvendes på mange andre områder af matematikken, hvor man arbejder med uendelige mængder eller strukturer, der kræver en omhyggelig analyse af relationen mellem funktioner.

Dette bevis og konstruktionen af hh giver en dybere forståelse af, hvordan vi kan sammenligne mængder, og hvordan vi kan bruge injektivitet og surjektivitet til at konstruere bijektioner, som kan anvendes i mange forskellige matematiske sammenhænge.

Hvordan forståelsen af irrationelle tal og induktion kan udvide vores matematiske værktøjer

Kvadratroden af to, √2, er et velkendt irrationelt tal, hvilket betyder, at det ikke kan repræsenteres som et forhold mellem to hele tal, som for eksempel 1/2 eller 3/4. Denne irrationelle natur hænger tæt sammen med rationelle tal, da det understreger, at der ikke findes noget brudt forhold, der præcist kan repræsentere √2. Matematikken bag denne erkendelse kræver en dybere forståelse af både de naturlige tal og de rationaliserede begreber i talteori.

En af de centrale egenskaber ved irrationelle tal som √2 er, at de ikke kan repræsenteres som en kvotient af to heltal. Dette kan virke indlysende, men at bevise det formelt kræver grundig matematisk indsigt. En formaliseret fremstilling af kvadratroden af to som et forhold mellem to naturlige tal involverer en proces, hvor vi ikke kun er begrænset af de rationelle tal, men også kan udvide vores forståelse til at omfatte de hele tal. For at opnå den nødvendige formalitet skal vi bruge principperne i de matematiske systemer, vi bygger op omkring begreber som naturlige tal, hele tal og reelle tal. I Mathlib, et bibliotek for Lean, er de naturlige tal, hele tal, rationelle tal, reelle tal og komplekse tal alle repræsenteret af forskellige datatyper. Denne opdeling i separate domæner er praktisk, men på samme tid kan det skabe udfordringer, når vi skal oversætte mellem disse domæner i mere komplicerede beviser.

For eksempel bliver det klart, at når man arbejder med induktion over de naturlige tal, kan man nemt definere rekursive funktioner som fakultetsfunktionen. I Lean, som er et system til formel matematik, kan vi definere fakultet som en rekursiv funktion, hvor vi starter med basiscasen for n=0 og derefter udvider ved at definere hvert næste trin som produktet af n+1 og fakultetet af n. Denne rekursive struktur er ikke kun en praktisk metode til at håndtere funktioner som fakultet, men den afslører også et grundlæggende princip i matematikken: induktion og rekursion er tæt forbundne værktøjer, der gør det muligt at bevise påstande om naturlige tal ved at arbejde sig gennem deres strukturer.

For at forstå og anvende induktion korrekt, kræves det, at vi anvender princippet om bevis ved induktion. Dette betyder, at for at bevise en generel påstand om naturlige tal, skal vi vise, at påstanden gælder for basis, her n=0, og dernæst vise, at hvis påstanden gælder for et vilkårligt tal n, så gælder den også for n+1. Denne proces gør induktion til en utrolig kraftfuld metode, der ikke kun er anvendelig i teoretisk matematik, men også i mere praktiske beviser. Eksempler som fakultetsfunktionen kan demonstrere induktionens kraft, idet vi bruger beviser som fac_pos, der beviser, at fakultetet altid er positivt, uanset n.

En anden vigtig anvendelse af induktion er indenfor summation og produktion over endelige mængder, som kan udtrykkes med Finset-typen i Lean. Dette værktøj gør det muligt at arbejde med summation og produktion af elementer fra en endelig mængde, hvilket er en grundlæggende operation i mange matematiske teorier. Ved at bruge den forenklede notation Σ x ∈ s, f x og Π x ∈ s, f x, bliver det lettere at arbejde med og manipulere summationer og produkter, især når disse operationer er rekursive.

En udfordring i denne sammenhæng er at navigere mellem de forskellige domæner af tal, som naturlige tal, hele tal og rationelle tal, især når det kommer til at definere operationer og funktioner, der involverer både summationer og produkter. For at kunne arbejde med sådanne operationer, bliver det nødvendigt at udvikle mere avancerede metoder til at håndtere både produkter og summer over endelige mængder. Disse operationer bliver mere håndterbare og lettere at udvide, når vi er i stand til at arbejde effektivt inden for hvert domæne.

I det næste kapitel vil vi begynde at udvikle de nødvendige værktøjer til at forstå den måde, Lean understøtter denne generelle tilgang til matematik. Det vil ikke kun uddybe vores forståelse af induktion og rekursion, men også vise, hvordan disse metoder kan udvides til mere komplekse matematiske objekter.

Der er dog flere aspekter, som læseren skal være opmærksom på, når det kommer til at forstå, hvordan induktion og rekursion fungerer i et formelt system som Lean. Induktion er ikke blot en teknisk proces; det er en metode, der afslører dybere strukturer i de naturlige tal og de objekter, vi definerer i matematikken. At forstå induktion kræver, at man ikke kun er bekendt med dens definition, men også med hvordan det interagerer med de rekursive strukturer, der ligger til grund for mange af de funktioner, vi arbejder med. Dette forhold mellem induktion og rekursion er fundamentalt for enhver avanceret matematisk analyse og bør derfor behandles med særlig opmærksomhed.

Hvordan strukturer binder data og egenskaber sammen i matematik

Strukturer i Lean er et kraftfuldt værktøj til at samle data og egenskaber på en organiseret måde. De giver os mulighed for at definere komplekse matematiske objekter, hvor vi ikke blot lagrer data, men også tilføjer specifikationer om, hvordan disse data skal opføre sig. Dette er særligt nyttigt i algebraisk abstraktion, hvor vi ofte arbejder med objekter, som skal opfylde bestemte egenskaber. Et godt eksempel på en sådan struktur er Point, som kan repræsentere et punkt i rummet med koordinaterne x, y og z.

Strukturer i Lean tillader os at definere matematiske objekter og de betingelser, som objekterne skal opfylde. For eksempel kan vi definere et punkt i det tredimensionale rum som en struktur, der indeholder koordinaterne x, y og z samt de betingelser, der gælder for disse koordinater. I dette tilfælde kan vi være interesserede i, at x, y og z er ikke-negative værdier, hvilket betyder, at vi i strukturen kan tilføje restriktioner, som garanterer, at hver af disse koordinater opfylder den betingelse, der er nødvendig.

En vigtig funktion i Lean er muligheden for at definere matematiske operationer på disse strukturer. For eksempel kan vi definere en addition af to punkter, hvilket resulterer i et nyt punkt, hvor de respektive koordinater summeres. Dette kan gøres på flere måder, og den måde, hvorpå operationen defineres, kan påvirke, hvordan senere beviser og udtryk bliver håndteret. Når vi for eksempel bruger den anonyme konstruktornotation i defineringen af funktioner som addAlt, kan vi gøre denne definition kortere og mere praktisk, men samtidig kan det føre til mere komplekse mål i senere beviser. Det er derfor vigtigt at overveje, hvordan vi strukturerer vores matematiske definitioner, så vi sikrer os, at de er både praktiske og nemme at arbejde med.

Når vi arbejder med strukturer, kan vi ikke blot definere data, men også de funktioner og operationer, som gælder for disse data. Det betyder, at vi kan opskrive de grundlæggende algebraiske operationer, som er nødvendige for at arbejde med de strukturer, vi definerer. For eksempel, hvis vi har defineret en struktur for et punkt i et rum, kan vi også definere addition, skalar multiplikation og andre operationer, der er relevante for punktets natur.

At arbejde med strukturer åbner op for at konstruere algebraiske systemer, hvor vi kan udnytte Lean til at definere og bevise egenskaber som kommutativitet og associativitet for de operationer, vi har defineret. For eksempel kan vi definere, at addition af to punkter er kommutativ og associativ og derefter bruge Lean til at bevise disse egenskaber.

En interessant mulighed i Lean er at definere geometriske objekter som strukturer, som for eksempel standard-2-simpleksen. Denne struktur definerer et objekt, hvor koordinaterne (x, y, z) er underlagt specifikke betingelser, som for eksempel at x, y og z skal være ikke-negative, og at summen af dem skal være lig med 1. Sådanne strukturer kan repræsentere geometriens objekter på en måde, der er både præcis og effektiv.

Strukturer kan også være afhængige af parametre. Et eksempel på dette er den generaliserede n-simpleks, hvor vi kan definere strukturen for en n-simpleks, der afhænger af n. På denne måde kan vi udvide vores konstruktioner til højere dimensioner og samtidig sikre, at alle de nødvendige betingelser opfyldes. I sådanne tilfælde arbejder vi med funktioner som midpoint, der beregner midtpunktet mellem to punkter i simpleksen, eller weightedAverage, der beregner en vægtet gennemsnit af to punkter.

Strukturer gør det muligt at arbejde med abstrakte matematiske objekter uden at bekymre sig om deres underliggende repræsentation. Dette betyder, at vi kan skabe matematiske systemer, hvor vi kun behøver at definere de operationer og egenskaber, der er nødvendige, og lade Lean håndtere de tekniske detaljer.

En vigtig egenskab ved strukturer er, at de kan binde sammen både data og egenskaber. Strukturer som IsLinear giver et eksempel på, hvordan vi kan samle egenskaber som additivitet og skalarbevaring i én enhed, som kan bruges i vores matematiske arbejde. På denne måde kan vi definere funktioner og operationer, som ikke blot opererer på data, men også på de egenskaber, som disse data skal opfylde.

Udover strukturer tilbyder Lean også andre måder at kombinere data og egenskaber, som for eksempel subtyper og Sigma-typer. Subtyper giver os mulighed for at kombinere data med en egenskab, som en funktion, der kun accepterer positive reelle tal. Sigma-typer går endnu længere ved at tillade os at definere typer, hvor den anden komponent afhænger af den første. Disse metoder kan bruges i stedet for strukturer, men strukturer giver den fordel, at de abstrakterer den underliggende repræsentation og giver os et veldefineret interface, der er nemmere at arbejde med i beviser og algebraiske manipulationer.

Det er også vigtigt at bemærke, at strukturer i Lean tilbyder en høj grad af fleksibilitet, som gør det muligt at definere matematiske objekter og operationer, der er både generelle og præcise. Denne fleksibilitet gør Lean til et kraftfuldt værktøj for matematikere og teoretiske computerfolk, der arbejder med abstrakte systemer og algebraisk struktur.

Hvordan håndteres undergrupper og gruppemorfismer i Lean og Mathlib?

I studiet af grupper i Lean og Mathlib er det væsentligt at forstå, at en undergruppe ikke blot er en delmængde af en gruppe, men derimod en undergruppe genereret af unionen af mængder. Denne operation håndteres med funktionen Subgroup.closure, som sikrer at den mindste undergruppe indeholdende begge oprindelige undergrupper opstår korrekt. Det er væsentligt at bemærke, at selve gruppen GG ikke har typen Subgroup G, men kan repræsenteres som den øverste (top) undergruppe i det lattice, der strukturerer undergrupperne. Denne top-undergruppe indeholder alle elementer af GG, mens bunden (den mindste undergruppe) kun indeholder neutral-elementet.

Et klassisk eksempel på manipulation med undergrupper i Lean er definitionen af konjugationen af en undergruppe med et element fra den omgivende gruppe. Konjugationen af en undergruppe HH ved et element xGx \in G defineres som mængden af elementer, der kan skrives som xhx1x h x^{ -1} for hHh \in H. Dette illustrerer vigtigheden af at kunne håndtere konstruktioner af nye undergrupper ud fra eksisterende operationer i gruppen.

Gruppemorfismer, altså homomorfier mellem grupper, giver anledning til begreberne map og comap i Mathlib. Disse repræsenterer henholdsvis billedet og præbilledet af en undergruppe under en gruppemorfisme. Selvom navngivningen ikke følger den klassiske matematiske terminologi, giver den en mere kortfattet notation. For eksempel er præbilledet af den mindste undergruppe (bestående kun af neutral-elementet) under en morfisme netop kernen af morfismen, hvilket er en essentiel konstruktion i gruppeteorien. Ligeledes er billedet af en morfisme en undergruppe af målet.

Øvelser i Mathlib understøtter bevisførelse om sammenhænge mellem disse operationer, som for eksempel at præbilledet bevarer inklusioner af undergrupper, eller at billedet af en sammensat morfisme kan udtrykkes ved at anvende billederne successivt. Denne algebraiske formaliseringsgrad gør det muligt at arbejde stringent og systematisk med komplekse gruppestrukturer i Lean.

To centrale sætninger i gruppeteori, som også findes formaliseret i Mathlib, er Lagranges sætning og Sylows første sætning. Lagranges sætning fastslår, at størrelsen (kardinaliteten) af en undergruppe i en endelig gruppe deler størrelsen af hele gruppen. Sylows første sætning er en delvis modsat retning og garanterer eksistensen af undergrupper af en given størrelse, der er potenser af et primtal. Disse resultater illustrerer dybt forbundne egenskaber mellem gruppers struktur og talteori.

Mathlib understøtter desuden konkrete grupper som symmetriske grupper på endelige mængder. Den symmetriske gruppe på nn elementer kan repræsenteres som gruppen af permutationer på en mængde med nn elementer. Her er det muligt at udtrykke gruppen som genereret af cykler og endda udføre konkrete beregninger med permutationer. Dette giver et håndgribeligt perspektiv på abstrakte gruppekonstruktioner.

Fri grupper og gruppresentationer udgør en vigtig måde at beskrive grupper på ved hjælp af generatorer og relationer. I Lean defineres den frie gruppe på en type α\alpha som FreeGroup α, hvor inklusionskortet er FreeGroup.of. Det universelle princip for fri grupper fremgår af FreeGroup.lift, som gør det muligt at definere gruppemorfismer ud fra kortlægninger af generatorerne. Ved at tilføje relationer og danne kvotientgrupper kan man beskrive komplekse grupper, som for eksempel grupper genereret af et enkelt element med en bestemt ordensrelation, såsom en gruppe isomorf med Z/3\mathbb{Z}/3.

Gruppens handlinger, altså group actions, binder gruppeteorien sammen med mange andre matematiske områder. En gruppes handling på en type XX svarer til en gruppemorfisme fra GG til gruppen af permutationer af XX. Det formaliserer gruppers evne til at transformere og påvirke andre strukturer, hvilket er fundamentalt i både algebra og geometri.

Ud over de rent algebraiske og formelle aspekter, bør læseren også være opmærksom på, at mange af de operationer og beviser, som fremstår abstrakte, kan visualiseres og konkretiseres ved at betragte specifikke grupper som symmetriske grupper eller fri grupper. Det styrker forståelsen af både teori og beregningsmetoder.

Det er vigtigt at forstå, at denne formaliserede tilgang ikke blot tjener til at skrive matematik i en maskinlæsbar form, men også skaber en klar struktur, der gør komplekse gruppeteoriske sammenhænge håndterbare. Dette omfatter evnen til at bevise store klassiske resultater samt at manipulere konkrete grupper og gruppemorfismer på en systematisk måde.