Objektorienterad modellering och diskreta strukturer 10. Mängder och språk Sven Gestegård Robertz Institutionen för datavetenskap, LTH 2013
Rekaputilation Vi har talat om satslogik, predikatlogik och härledning mängdlärans begrepp Vi kommer att använda predikatlogik när vi gör denitioner i mängdläran. och sedan studera de mängder som kallas språk. introducera laboration 3. Rekapitulation 10. Mängder och språk 2/40
Mängdlära Primitiva begrepp: mängd, element och tillhör. Notation: och {1, 3, 5}. Mängder av tal: N, Z, Q, R,... B = {F, T} Mängdlära 10. Mängder och språk 3/40
Kardinalitet Denition Om M är en ändlig mängd M = antalet element i mängden. Exempel {1, 3, 5} = 3 = 0 {1, 3, 1, 5} = 3 { } = 1 Mängdlära 10. Mängder och språk 4/40
Mängdbyggare Denition Om U är en mängd och P (x) är ett predikat, där x U så är M = {x U P (x)} den mängd som har egenskapen x. x M x U P (x) Detta åternns i programmeringsspråk som har List comprehension: att skapa en lista baserat på existerande listor. Exempel i Python: >>> M = [ x f o r x i n r a n g e ( 1 0 ) i f x % 2 == 0 ] >>> p r i n t M [ 0, 2, 4, 6, 8 ] >>> S = { v f o r v i n [ 1, 2, 3, 1, 5, 4, 6 ] i f v not i n [ 4, 5, 6 ] } >>> p r i n t S s e t ( [ 1, 2, 3 ] ) Mängdlära 10. Mängder och språk 5/40
Induktivt denierade mängder Vi kan deniera mängden av alla satslogiska uttryck, L, som den minsta mängd med följande egenskaper: Om x är ett variabelnamn så x L. Om P L så P L. Om P L och Q L så tillhör alla (P Q), (P Q) (P Q) och (P Q) också mängden L. Känner ni igen kompositmönstret? Expr 1 getvalue() : boolean 2 1 Not Variable - name : String - value : boolean And 1 getvalue() : boolean +getname() : String getvalue() : boolean +getvalue() : boolean Mängdlära 10. Mängder och språk 6/40
Delmängd Denition M 1 M 2 = m. m M1 m M 2 Sats (Transitivitet) Om A B och B C så är A C. Bevis. Antag att a A. Detta betyder att a är ett godtyckligt element i A, men att a är samma element i hela beviset. Vi skall visa att a C. Av denitionen på A B så följer att a B. Eftersom B C så gäller på samma sätt att a C. Mängdlära 10. Mängder och språk 7/40
Ett härledningsträd Satsen kan, enligt denitionen av skrivas { m. m A m B, m. m B m C} m. m A m C m. m A m B [ E ] m A m B [m A] [ E ] m B m C m. m B m C [ E ] m B m C [ E ] [ I ] m A m C [ I ] m. m A m C Notera att regeln I innebär att antagandet till vänster om pilen (m A) upphävs. Regeln betyder alltså att en härledning där antagandet P leder till Q ersätts med implikationen P Q och därefter används inte antagandet P längre. Mängdlära 10. Mängder och språk 8/40
Likhet för mängder Denition M 1 = M 2 = M1 M 2 M 2 M 1 Mängdlära 10. Mängder och språk 9/40
Mängdoperationer Denition (Union) M 1 M 2 = {x x M1 x M 2 }. Denition (Snitt) M 1 M 2 = {x x M1 x M 2 }. Denition (Relativt komplement, Dierens) M 1 M 2 = {x M1 x M 2 }. Denition (Absolut komplement) M = {x M}. (M = U M ) Mängdlära 10. Mängder och språk 10/40
Mängdoperationer och logiska konnektiv Räknelagarna i mängdläran är analoga med de i satslogiken B B B A A A A B A B (A B) (A B) Mängdlära 10. Mängder och språk 11/40
Potensmängd Potensmängden P(M) denieras som mängden av alla delmängder av M Denition P(M) = {S S M} Exempel P({1, 2}) = {, {1}, {2}, {1, 2}} Notera att P(M) och att M P(M) Mängdlära 10. Mängder och språk 12/40
Alternativ beteckning 2 M = P(M) Sats Om M är en ändlig mängd så är 2 M = 2 M. Mängdlära 10. Mängder och språk 13/40
Partitionering Denition En uppdelning av en mängd i disjunkta icketomma delmängder kallas för en partitionering. Det går att partitionera {1, 3, 5} på fem olika sätt: {{1}, {3}, {5}} {{1, 3}, {5}} {{1, 5}, {3}} {{3, 5}, {1}} {{1, 3, 5}} Mängdlära 10. Mängder och språk 14/40
Aktivitet Denition En uppdelning av en mängd i disjunkta icketomma delmängder kallas för en partitionering. Använd predikatlogik för att ge ett villkor för att {A 1, A 2,..., A n } är en partitionering av A. ( n i=1 ) A i = A ( ) i. j. i j A i A j = ( i.a i ) Mängdlära 10. Mängder och språk 15/40
Par Ett par (eng. pair) har två komponenter. Om komponenterna är a och b betecknar vi paret med (a, b). I matematiken är ordningen mellan komponenterna i ett par i regel signikant. (1, 2) och (2, 1) är olika par. Mängdlära 10. Mängder och språk 16/40
Likhet för par Denition (a 1, b 1 ) = (a 2, b 2 ) = (a 1 = a 2 ) (b 1 = b 2 ) Mängdlära 10. Mängder och språk 17/40
Par i Java public final class Pair { private A a; private B b; public boolean equals(object object) { if(!(object instanceof Pair)) { return false; } Pair other = (Pair) object; return a.equals(other.a) && b.equals(other.b); } } public int hashcode()... Mängdlära 10. Mängder och språk 18/40
Produktmängd Kartesisk produkt Denition M 1 M 2 = {(m1, m 2 ) m 1 M 1, m 2 M 2 } René Descartes, Cartesius (15961650) Mängdlära 10. Mängder och språk 19/40
Russels paradox Låt U vara mängden av alla mängder. Deniera M = {S U S S} Betrakta M / M M M Antagandet leder till motsägelsen M / M M M Mängdlära 10. Mängder och språk 20/40
Laboration 3 Givet: Klasser för en term: a x f(x) g(y, (f(x))) tostring collectvariables Att göra: t 1 [x\t 2 ] f(x)[x\g(x)] = f(g(x)) Term substitute(variable, Term) Laboration 3: Predikatlogik och substitution 10. Mängder och språk 21/40
Laboration 3 Att göra: Klasser för ett predikatlogiskt uttryck: n-ställiga predikat, P (x, f(y)) implikationer, e 1 e 2 allkvantieringar, x. e tostring Expr substitute(variable, Term) ( x. P (x, y))[x\g(z)] = ( x. P (x, y)) ( x. P (x, y))[y\g(z)] = ( x. P (x, g(z))) ( x. P (x, y))[y\g(x)] = ( v 0. P (v 0, g(x))) Laboration 3: Predikatlogik och substitution 10. Mängder och språk 22/40
Substitution i kvantieringar NB! Rätt i F08, fel i exempel i F09 Tre fall: 1. om v och x är samma variabel ( v. P )[x\t] = ( v. P ) Exempel Notera. Substitutionen ( x N. x > 0)[x\2] ger enligt ovan resultatet x N. x > 0 medan substitutionen (x > 0)[x\2] betyder Sätt in x = 2, d v s 2 > 0 Laboration 3: Predikatlogik och substitution 10. Mängder och språk 23/40
Term Term + collectvariables(set<variable>) : Set<Variable> Constant - name : String Variable - name : String + equals(object) : boolean + hashcode : int Function - name : String - termlist: TermList ArrayList<Variable> TermList - name : String + collectvariables(set<variable>) : Set<Variable> Laboration 3: Predikatlogik och substitution 10. Mängder och språk 24/40
Metoder (konstruerare) med godtyckligt antal parametrar public class TermList extends ArrayList<Term> { public TermList(Term... terms) { super(arrays.aslist(terms)); } } Variable x = new Variable("x"); Variable y = new Variable("y"); Variable z = new Variable("z"); TermList termlist = new TermList(x, y, z); Laboration 3: Predikatlogik och substitution 10. Mängder och språk 25/40
Laboration 3 Givet: Basklasser och testfall Att göra: Studera testfallen, och komplettera efter behov Lägg till funktionalitet för substitution (i paketet term) Implementera, och predikat (i paketet predicate) Förberedelse behövs! Laboration 3: Predikatlogik och substitution 10. Mängder och språk 26/40
Alfabeten, strängar och språk Ett alfabet är en ändlig icketom mängd vars element kallas symboler. En sträng på ett alfabet är en ändlig följd av symboler ur alfabetet. Språk 10. Mängder och språk 27/40
Sträng Denition Låt Σ vara ett alfabet. ɛ är en sträng på Σ. Om σ Σ och α är en sträng på Σ så är σα en sträng på Σ. Språk 10. Mängder och språk 28/40
String public interface String {} public class Empty implements String {} public class NonEmpty implements String { private char c; private String tail; } Språk 10. Mängder och språk 29/40
String public interface String { public int length(); public String concatenate{string other}; public String reverse{}; } Språk 10. Mängder och språk 30/40
Strängoperationer Denition (Längd) ɛ = 0 σα = 1 + α Denition (Konkatenering) ɛ α = α (σα) β = σ(α β) Språk 10. Mängder och språk 31/40
Reversering, prex, etc. α R (abc) R = cba. Om ω = α β γ, där α, β och γ är strängar kallar vi α för ett prex, γ ett sux och β en delsträng till ω. Språk 10. Mängder och språk 32/40
Potenser α n+1 α 0 = ɛ = α α n, n 0 Språk 10. Mängder och språk 33/40
Språk Med ett språk på ett alfabet menas en mängd strängar på alfabetet. Språk 10. Mängder och språk 34/40
Operationer L 1 \ L 2 = L1 L 2 = {ω L1 ω L 2 } L 1 L 2 = L1 L 2 = {u v u L1 v L 2 } L 0 L k+1 = {ɛ} = L L k L = L + k=0 L k = L L Språk 10. Mängder och språk 35/40
Ett reguljärt uttryck Ett språk {0} ({1} ({0} {1}) ) motsvarande reguljära uttryck 0 (1 (0 1) ) beskriver språket som innehåller alla binära tal utan onödiga inledande nollor {0, 1, 10, 11, 100,...} Språk 10. Mängder och språk 36/40
Reguljära uttryck Mängden av reguljära uttryck på alfabetet Σ denieras av Denition är ett reguljärt uttryck ɛ är ett reguljärt uttryck om σ Σ så är σ ett reguljärt uttryck om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck om α är ett reguljärt uttryck så är α ett reguljärt uttryck Språk 10. Mängder och språk 37/40
Exempel a (a b) (((a b) a) (b a) ) är reguljära uttryck på alfabetet {a, b}. Språk 10. Mängder och språk 38/40
Semantik Denition L[ ] L[ɛ] L[σ ] = = {ɛ} = {σ}, σ Σ L[α β ] L[α β ] L[α ] = L[α]L[β ] = L[α] L[β ] = (L[α]) Språk 10. Mängder och språk 39/40
Sammanfattning Vi har talat om mängdlära strängar språk reguljära uttryck Nästa föreläsning: Språk och grammatiker Vi kommer att studera reguljära uttryck och deras begränsningar introducera grammatiker för att beskriva mer komplexa språk Språk 10. Mängder och språk 40/40