I matematikken er begrebet existential quantifikation afgørende for at udtrykke påstande som "der eksisterer et element, der opfylder en bestemt betingelse." I Lean, et bevisassistentprogram, er det en central teknik at kunne arbejde med sådanne kvantifikatorer. Dette bliver især synligt i de forskellige måder, man kan konstruere og formalisere beviser på.

I et af de beskrevne eksempler er der blevet defineret en funktion, der tager et element xx og returnerer et par (a,b)(a, b), sådan at xx kan skrives som summen af to kvadrater a2+b2a^2 + b^2. Denne funktion, som er blevet givet navnet SumOfSquares, kan formelt defineres som en eksistens erklæring:

SumOfSquares(x):=a,b,x=a2+b2\text{SumOfSquares}(x) := \exists a, b, x = a^2 + b^2

I beviset, som anvender denne funktion, viser man, hvordan produktet af to sådanne tal også kan udtrykkes som summen af to kvadrater. I en operation som xyx \cdot y (hvor xx og yy er tal, der kan udtrykkes som summen af kvadrater), bliver det første skridt at udpakke de to eksisterende kvantifikatorer, der er knyttet til xx og yy. Denne udpakning sker ved hjælp af rcases-taktikken, hvor man eksplicit angiver de magiske værdier, der er nødvendige for at udtrykke produktet som summen af kvadrater.

Beviset for denne sætning kræver ikke nødvendigvis en dyb indsigt i de matematiske egenskaber ved produktet af summen af kvadrater. I stedet anvender vi et elementært bevis, som er grundlæggende for at vise, at produktet af to sådanne tal kan udtrykkes som summen af to kvadrater. I dette tilfælde er det nemmere at anvende eksisterende formelle metoder end at gå igennem en omfattende manuel udledning.

En naturlig opfølgning på dette ville være at forstå, hvordan produktet af to såkaldte Gaussian integers fungerer. Et Gaussian integer er et tal af formen a+bia + bi, hvor aa og bb er heltal, og ii er den imaginære enhed (i=1i = -1). Normen af et Gaussian integer er defineret som a2+b2a^2 + b^2, og denne norm er en sum af kvadrater. Det matematiske resultat, som beviset bygger på, er, at normen af produktet af to sådanne tal er produktet af deres individuelle normer. Denne egenskab er af stor betydning, da det illustrerer forbindelsen mellem kvadrater og komplekse tal.

Beviset illustrerer dog en vigtig pointe: det nemmeste bevis at formaliserer er ikke nødvendigvis det, der giver mest indsigt i emnet. Derfor vil vi i den kommende sektion vise en alternativ måde at bevise dette på ved at definere Gaussian integers og bruge disse til at fremlægge en mere konkret forståelse af produktet.

I de fleste tilfælde vil anvendelsen af rcases-taktikken være tilstrækkelig til at håndtere en eksistenskvantifikator. Taktikken gør det muligt at "udpakke" en ligning, der er indeholdt i en sådan kvantifikator, og bruge disse værdier til at omskrive udtrykket i målet. I de tidligere eksempler har vi set, hvordan man anvender rfl i stedet for en ny identifier for at automatisere omskrivningen. Dette skaber en enklere måde at arbejde med beviser på, især når man arbejder med udtryk, der involverer algebraiske strukturer.

Der er dog situationer, hvor en eksistenskvantifikator bliver brugt til at formulere et bevis, der ikke kun involverer algebraiske operationer. For eksempel kan divisibilitet også ses som en form for eksistenskvantifikation. I tilfælde af divisibilitet af aa og bb, dvs. aba | b, betyder det, at der findes et tal dd, sådan at b=adb = a \cdot d. Denne ide kan generaliseres og anvendes til at håndtere forskellige typer af beviser, hvor man arbejder med egenskaber som divisibilitet og relationer mellem tal.

Når man arbejder med funktioner, er eksistens også et relevant begreb. For eksempel, en funktion f:αβf : \alpha \to \beta siges at være surjektiv, hvis for hver yy i codomænet β\beta, findes der et xx i domænet α\alpha, sådan at f(x)=yf(x) = y. Denne erklæring om surjektivitet inkluderer både en universel og en eksistentiel kvantifikator. I Lean kan man bruge taktik som intro og use til at vise, at for hvert yy findes der et xx, så f(x)=yf(x) = y.

Et godt eksempel på dette er, hvordan man håndterer surjektive funktioner ved at kombinere eksisterende resultater fra de tidligere kvantifikatorer. Hvis man for eksempel har en surjektiv funktion ff, kan man udlede, at for enhver værdi i R\mathbb{R} kan der findes et xx, sådan at f(x)=4f(x) = 4. Denne form for arbejde med surjektive funktioner kan udvides til at gælde for sammensatte funktioner, hvilket kan gøres ved at bruge rcases-taktikken for at vise, hvordan sammensætningen også vil være surjektiv.

I det hele taget er det vigtigt at bemærke, at arbejdet med eksistenskvantifikatorer og beviser, der involverer sådanne kvantifikatorer, er grundlæggende for en forståelse af algebraiske og funktionelle relationer i Lean. Det er nødvendigt at opbygge et solidt kendskab til de taktikker og metoder, der kan bruges til at udpakke og manipulere disse kvantifikatorer, for at kunne konstruere mere komplekse beviser på en effektiv måde.

Hvordan forstå disjunktioner og konvergens i matematik i Lean

I matematikken, og især i formelle bevis, støder man ofte på disjunktioner. En disjunktion er en logisk operator, som forbinder to udsagn, hvor ét af dem skal være sandt. Dette kan ofte fremstå i udtrykkene PQP \vee Q, hvilket betyder "P eller Q". Det er derfor vigtigt at forstå, hvordan man kan arbejde med disjunktioner i formelle beviser, især i systemer som Lean.

En af de grundlæggende funktioner i Lean er at kunne arbejde med sådanne logiske strukturer, som f.eks. at dele et bevis op i flere tilfælde, hvilket gør det lettere at håndtere problemer, der kan have flere løsninger eller retninger. Når man står overfor en disjunktion som xxx \leq |x|, hvor xx er et reelt tal, kan man bruge Lean's indbyggede taktikker som rcases og rintro for at håndtere de forskellige tilfælde i en bevisførelse.

Eksempler som xxx \leq |x| og xx-x \leq |x| viser, hvordan man kan formulere og anvende reglerne for absolutte værdier i beviser. I disse tilfælde vil Lean bruge en strategi, hvor man opdeler det oprindelige udsagn i flere mål, hvilket gør det muligt at anvende flere logiske teknikker til at afslutte beviset.

Disjunktioner, som dem der opstår i sætninger som x<yx < |y| eller x<y|x| < y, kan ofte forårsage flere delmål, der kræver adskilte beviser. I Lean kan vi håndtere dette ved at bruge taktikker som by_cases, som tillader os at splitte beviset i to tilfælde: enten x<yx < y eller x<yx < -y. Denne tilgang gør det muligt at gennemføre et bevis med præcision og effektivitet.

En vigtig opmærksomhedspunkt er, at Lean understøtter mere komplekse mønstre med indlejrede disjunktioner. For eksempel kan man bruge rcases til at udfolde hypoteser og dele et bevis i flere scenarier. Dette kræver en god forståelse af, hvordan man håndterer bevisførelser, hvor man kombinerer flere taktikker og de nødvendige strategier for at afslutte hvert delmål.

Udover grundlæggende beviser som x2=1x=1x=1x^2 = 1 \rightarrow x = 1 \vee x = -1 eller x2=y2x=yx=yx^2 = y^2 \rightarrow x = y \vee x = -y, kan man også udnytte de specielle egenskaber af ringe og integrale domæner. I et integralt domæne, som er en kommutativ ring uden ikke-trivielle nuldivisorere, gælder det, at når xy=0x \cdot y = 0, så må enten x=0x = 0 eller y=0y = 0. Dette giver et vigtigt værktøj til at forstå strukturen i matematiske systemer og anvende disse begreber til formelle beviser.

Lean gør det muligt at arbejde med disjunktioner på en måde, der er intuitiv, men kræver præcision. Når man bruger teknikker som by_cases, skal man være opmærksom på, hvordan hypoteser opdeles og anvendes i forskellige scenarier, især når man arbejder med teoremer, der involverer nuldivisorere og deres forhold til elementer i en ring.

For at opnå dybere indsigt i Lean og den matematiske logik, der ligger til grund for det, er det nødvendigt at forstå, hvordan man arbejder med em (ekskluderet middel) og andre logiske principper. Em er et fundamentalt princip i klassisk logik, der siger, at for enhver påstand PP gælder enten PP eller ikke PP. Denne grundlæggende logik er nødvendig for at kunne bruge taktikker som cases em til at opdele beviser i de nødvendige tilfælde og afslutte dem effektivt.

I forbindelse med konvergens er det også vigtigt at forstå de matematiske begreber, der ligger til grund for begreberne som sekvenser og deres grænse. I Lean kan en sekvens s0,s1,s2,s_0, s_1, s_2, \dots af reelle tal repræsenteres som en funktion s:NRs: \mathbb{N} \rightarrow \mathbb{R}, og en sekvens siges at konvergere til et tal aa, hvis for hvert ϵ>0\epsilon > 0 findes et tal NN, sådan at for alle nNn \geq N gælder sna<ϵ|s_n - a| < \epsilon. Dette princip danner grundlaget for mange beviser i analyse og er af central betydning for arbejdet med konvergens i Lean.

Taktikker som ext, congr og convert er essentielle værktøjer til at arbejde med ligheder og transformationer i Lean. ext bruges til at bevise, at to funktioner er ens, mens congr tillader os at bevise ligheder ved at håndtere forskellene i udtryk. convert gør det muligt at anvende teoremer direkte, når deres konklusioner ikke stemmer overens med den oprindelige målsætning. Ved at bruge disse taktikker effektivt kan man håndtere de udfordringer, der opstår i forbindelse med konvergensbeviser.

For eksempel, hvis vi har en konstant sekvens a,a,a,a, a, a, \dots, vil denne altid konvergere til aa, og det kan bevises i Lean ved hjælp af en simpel argumentation, der involverer ϵ\epsilon-definitionen af konvergens. En mere kompleks situation opstår, når vi kombinerer to sekvenser, der hver især konvergerer til forskellige grænser. I dette tilfælde skal vi udnytte egenskaberne ved maksimum og bruge teknikker som linarith og rcases for at vise, at summen af de to sekvenser også konvergerer til summen af deres grænser.

At arbejde med disse koncepter kræver både dygtighed i at anvende Lean's taktikker og en forståelse af de underliggende matematiske principper, der gør det muligt at formulere og bevise komplekse udsagn om konvergens, sekvenser og disjunktioner. Det er gennem disse teknikker, at man kan opnå en dybdegående forståelse af matematik og logik i formelle systemer som Lean.

Hvordan Filter Kan Defineres og Forstås: En Introduktion til Filtre i Matematisk Programmering

I Mathlib defineres et filter FF som en struktur, der indeholder mængden F.setsF.sets, sammen med tre grundlæggende egenskaber, som hjælper med at konstruere og arbejde med filtre i matematiske modeller. Det første krav er, at universet er indeholdt i F.setsF.sets; det andet krav siger, at hvis en mængde indeholder en mængde fra F.setsF.sets, så skal denne mængde også være et element i F.setsF.sets; det tredje krav fastslår, at F.setsF.sets er lukket under endelige snit. Dette betyder, at hvis to mængder er i F.setsF.sets, så er deres snit også en del af F.setsF.sets. I Mathlib bruges betegnelsen "filter" til at referere til en struktur, der samler F.setsF.sets og dens tre egenskaber, men i praksis bruges betegnelsen FF ofte uden at skelne mellem selve filteret og mængden af sæt F.setsF.sets, hvilket kan gøre forståelsen lettere.

En filter kan tænkes som en måde at definere en "tilstrækkeligt stor" mængde. Det første krav fastslår, at universet er tilstrækkeligt stort. Det andet krav siger, at en mængde, der indeholder en tilstrækkelig stor mængde, selv må være tilstrækkelig stor. Det tredje krav siger, at snittet af to tilstrækkeligt store mængder også er tilstrækkeligt stort. Denne idé gør det muligt at definere filtre som generaliserede mængder, som i sin essens arbejder med begrebet "næsten alle" mængder, men uden at beskrive dem eksplicit.

Filtre på en type XX kan ses som generaliserede elementer af mængden af mængder på XX, eller på en mere intuitiv måde som elementer, der beskriver de store mængder af elementer på XX. For eksempel, filteret atTop\text{atTop} kan ses som et filter, der beskriver de meget store tal, mens Nx0N x_0 beskriver mængden af punkter, der ligger meget tæt på x0x_0. Denne forståelse af filtre gør det muligt at arbejde med funktioner, der konvergerer til et filter på en naturlig måde.

Når vi ser på filtre i konkrete eksempler, kan vi introducere den såkaldte "hovedfilter", der består af alle mængder, der indeholder en given mængde ss. Dette filter kan defineres ved hjælp af følgende kode i Mathlib:

lean
def principal {α : Type*} (s : Set α) : Filter α where
sets := { t | s ⊆ t } univ_sets := sorry sets_of_superset := sorry inter_sets := sorry

Et andet klassisk eksempel på filtre er atTop\text{atTop}, som beskriver filteret af de store naturlige tal:

lean
example : Filter ℕ := { sets := { s | ∃ a, ∀ b, a ≤ b → b ∈ s } univ_sets := sorry sets_of_superset := sorry inter_sets := sorry }

Filtere kan også bruges til at definere begrebet konvergens af funktioner. Hvis vi har en funktion f:XYf : X \to Y, et filter FFXX, og et filter GGYY, kan vi definere, at ff konvergerer til GG langs FF som:

lean
def Tendsto1 {X Y : Type*} (f : X → Y) (F : Filter X) (G : Filter Y) := ∀ V ∈ G, f ⁻¹' V ∈ F

Når X=NX = \mathbb{N} og Y=RY = \mathbb{R}, kan Tendsto1\text{Tendsto1} fortolkes som konvergens af en sekvens u:NRu : \mathbb{N} \to \mathbb{R} til det reelle tal xx. Når både XX og YY er R\mathbb{R}, svarer Tendsto\text{Tendsto} til den velkendte grænse limxx0f(x)=y0\lim_{x \to x_0} f(x) = y_0.

Der er dog en alternativ, mere algebraisk tilgang til at definere konvergens, som bruger begreberne for pushforward (map) og den ordnede relation på filtre. Denne tilgang skjuler kvantifikatorerne og gør det lettere at arbejde med filterne på en mere abstrakt måde. Her definerer vi:

lean
def Tendsto2 {X Y : Type*} (f : X → Y) (F : Filter X) (G : Filter Y) :=
map f F ≤ G

Denne definition benytter sig af filtrenes ordnede struktur og giver en direkte måde at udtrykke konvergens på uden at eksplicit udtrykke mængderne VV eller kvantifikatorerne.

En vigtig egenskab ved filtere er, at de er kompatible med sammensætning. Når vi har to funktioner f:XYf : X \to Y og g:YZg : Y \to Z, og hvis ff konvergerer langs filteret FF til GG, og gg konvergerer langs filteret GG til HH, så vil gfg \circ f konvergere langs FF til HH. Dette udnyttes i algebraiske beviser, som kan bygge videre på operationerne med filtere som pushforward, comap, inf, sup og prod.

Når vi ser på flere dimensioner, som for eksempel på planet R2\mathbb{R}^2, kan vi bruge produktoperationen for filtre F×GF \times G for at kombinere to filtre, som beskriver naboskaberne af punkter på R\mathbb{R}. Hvis vi har to filtre Nx0N x_0 og Ny0N y_0, så beskriver produktet N(x0,y0)=Nx0×Ny0N (x_0, y_0) = N x_0 \times N y_0 en kombination af naboskaber i to dimensioner. Denne operation generaliserer begrebet snit af mængder.

Filtere som matematiske objekter har derfor en meget stærk algebraisk struktur, som gør det muligt at arbejde med konvergens, sammensætning af funktioner og operationer på filtre på en meget abstrakt og fleksibel måde.

Hvad er kompakthed i metrikrum og hvordan påvirker det funktioner?

I metrikrummet er begrebet kompakthed centralt for at forstå visse egenskaber ved mængder, funktioner og sekvenser. En mængde kaldes kompakt, hvis den opfylder to væsentlige egenskaber: først og fremmest, at enhver sekvens, der ligger i den kompakte mængde, har en konvergerende delsekvens. For det andet, at enhver kontinuerlig funktion, der er defineret på en kompakt mængde, opnår sine ekstremværdier.

Når vi taler om kompakthed i metrikrum, relaterer vi det til to grundlæggende egenskaber, som er meget relevante for topologi og analyse. Den første egenskab er, at enhver sekvens, hvis elementer ligger i en kompakt mængde, nødvendigvis har en konvergerende subsekvens. Dette er en direkte konsekvens af den såkaldte Heine-Borel sætning, som gælder for kompaktheder i metrikrum. En af de vigtigste observationer er, at kompakte mængder i metrikrum er lukkede og begrænsede.

For at illustrere dette, kan vi tage det velkendte interval [0,1][0, 1] i de reelle tal. Dette interval er kompakt, fordi det er både lukket og begrænset, og enhver sekvens i dette interval har en delsekvens, der konvergerer til et punkt i intervallet. Mere generelt kan vi definere kompakthed i et metrikrum som et rum, hvor enhver sekvens, der er bundet i mængden, har en konvergerende subsekvens.

Lad os antage, at vi arbejder med et metrikrum XX, og vi ønsker at definere en funktion u:NXu : \mathbb{N} \rightarrow X, hvor hver værdi u(n)u(n) ligger i en kompakt mængde sXs \subset X. Hvis vi har en sekvens i ss, kan vi anvende kompakthed til at finde en subsekvens, der konvergerer til et punkt i mængden. Dette er et centralt resultat, som hjælper os med at forstå strukturen af sekvenser i metrikrum.

Kompakte mængder har også en vigtig egenskab med hensyn til funktioner. Hvis en funktion ff er kontinuerlig på en kompakt mængde, så er den ikke kun begrænset, men også opnår sine ekstremværdier. Dette betyder, at ff nødvendigvis når et maksimum og et minimum på en kompakt mængde. Et klassisk eksempel på dette er det såkaldte ekstremumssætning, der siger, at hvis en funktion er kontinuerlig på et lukket interval i de reelle tal, så vil den opnå både et maksimum og et minimum på dette interval.

Desuden, når vi ser på den topologiske struktur af metrikrum, spiller kompaktheden en væsentlig rolle i forbindelse med de åbne og lukkede mængder, vi arbejder med. En mængde ss er lukket, hvis dens komplement er åbent. En lukket mængde har også den vigtige egenskab, at den er kompakt, hvis det metriske rum er kompakt. Det betyder, at vi kan arbejde med lukkede mængder og konkludere, at de er kompakta, hvilket kan bruges til at analysere sekvenser og funktioner på en effektiv måde.

Endvidere har kompaktheden også stor betydning for forståelsen af grænseforhold og for sekvenser, der konvergerer mod et punkt. En vigtig egenskab ved kompakte rum er, at de er "komplette". Det betyder, at alle Cauchy-sekvenser i et kompakt rum konvergerer til et punkt i dette rum. I konteksten af metrikrum betyder det, at enhver sekvens, der bliver tættere og tættere på sig selv, nødvendigvis vil konvergere til et bestemt punkt, hvis rummet er kompakt. Dette er ikke altid tilfældet i ikke-kompakte rum, hvor Cauchy-sekvenser kan miste deres grænse.

I metrikrum er der også et begreb om ensartet kontinuitet, der er nært forbundet med kompakthed. En funktion siges at være ensartet kontinuerlig, hvis ændringer i dens input kun medfører små ændringer i dens output, uafhængigt af hvor inputtene befinder sig. Det betyder, at for hver ϵ>0\epsilon > 0 findes der en δ>0\delta > 0, sådan at for alle aa og bb i rummet, hvis afstanden mellem aa og bb er mindre end δ\delta, vil afstanden mellem f(a)f(a) og f(b)f(b) være mindre end ϵ\epsilon.

I kompakte metrikrum er alle kontinuerlige funktioner ensartet kontinuerlige. Dette betyder, at hvis et metrikrum er kompakt, så vil enhver funktion, der er kontinuerlig på dette rum, nødvendigvis være ensartet kontinuerlig. Denne sammenhæng gør det muligt at forstå, hvordan funktioner opfører sig i kompakte metrikrum, og det er en væsentlig egenskab for mange topologiske og analytiske resultater.

Desuden er et metrikrum komplet, hvis hver Cauchy-sekvens i rummet konvergerer. For et komplet metrikrum er dette en nødvendighed. Det betyder, at alle sekvenser, der bliver tættere og tættere på hinanden, også må konvergere til et bestemt punkt i rummet. Denne egenskab gør kompaktheden vigtig i forbindelse med funktioner, der opererer på metrikrum, og den giver os værktøjer til at bevise, at visse sekvenser af funktioner eller elementer i rummet nødvendigvis vil konvergere.

I kompakte metrikrum, hvor både lukkede mængder er kompakta og alle Cauchy-sekvenser konvergerer, er det også muligt at anvende Baire's sætning, som er en kraftfuld metode til at analysere åbne mængder i metrikrum. Baire's sætning hævder, at i et komplet metrikrum kan en uendelig intersection af åbne mængder, der er tætte, stadig være tæt. Dette giver en endnu dybere forståelse af, hvordan åbne og lukkede mængder fungerer i et metrikrum, og hvordan man kan bruge kompaktheden til at udlede resultater om konvergens og tæthed.