1.41k likes | 1.43k Views
Theory of computing, part 1. Course outline. Old computers. Abacus. Abacus. The difference engine (1832).
E N D
The difference engine (1832) Born December 26, 1791 in Teignmouth, Devonshire UK, Died 1871, London; Known to some as the Father of Computing for his contributions to the basic design of the computer through his Analytical machine..
ENIAC (1946) The ENIAC machine occupied a room 30x50 feet. The controls are at the left, and a small part of the output device is seen at the right.
ENIAC (1946) The IBM 360 was a revolutionary advance in computer system architecture, enabling a family of computers covering a wide range of price and performance.
Models of computing • Finite state machines (automata) Pattern recognition Simple circuits (e.g. elevators, sliding doors) • Automata with stack memory (pushdown autom.) Parsing computer languages • Automata with limited tape memory • Automata with infinite tape memory Called `Turing machines’, Most powerful model possible Capable of solving anything that is solvable
Chomsky hierarchy of grammars • Regular grammars • Context free grammars • Context sensitive grammars • Unrestricted grammars
Computers can recognise languages Computers can be made to recognize, or accept, the strings of a language. There is a correspondence between the power of the computing model and the complexity of languages that it can recognize! • Finite automata only accept regular grammars. • Push down automata can also accept context free grammars. • Turing machines can accept all grammars.
Sets • A set is a collection of things called its elements. If x is an element of set S, we can write this: x S • A set can be represented by naming all its elements, for example: S = {x, y, z} • There is no particular order or arrangement of the elements, and it doesn’t matter if some appear more than once. These are all the same set: {x, y, z}={y, x, z}={y, y, x, z, z}
Combining sets • A set with no elements is called the empty set, or a null set. It is denoted by ={}. • If every element of set A is also an element of set B, then A is called a subsetof B : A B • The union of two sets is the set with all elements which appear in either set: C = A B • The intersection of two sets is the set with all the elements which appear in both sets: C = A B
Alphabet and strings • A string a sequence of symbols that are placed next to each other in juxtaposition • The set of symbols which make up a string are taken from a finite set called an alphabet E.g.{a, b, c} is the alphabet for the string abbacb. • A string with no elements is called an empty string and is denoted . • If Σ is an alphabet, the infinite set of all strings made up from Σ is denoted Σ*. E.g., if Σ={a}, then Σ*={, a, aa, aaa, …}
Languages • A language is a set of strings. • If Σis an alphabet, then a language over Σ is a collection of strings whose components come from Σ. • So Σ* is the biggest possible language over Σ, and every other language over Σ is a subset of Σ*.
Examples of languages • Four simple examples of languages over an alphabet Σ are the sets , {}, Σ, and Σ*. • For example, if Σ={a} then these four simple languages over Σare , {}, {a}, and {, a, aa, aaa, …}. • Recall {} is the empty string while is the empty set. Σ* is an infinite set.
Example: English • The alphabet isΣ = {a,b,c,d,e…x,y,z} • The English language is made of strings formed from Σ: e.g.fun, excitement. • We could define the English Language as the set of strings over Σ which appear in the Oxford English dictionary (but it is clearly not a unique definition).
Concatenation • The natural operation of concatenation of strings places two strings in juxtaposition. • For example, if then the concatenation of the two strings aab and ba is the string aabba. • Use the name catto denote this operation. cat(aab, ba) = aabba.
Combining languages • Languages are sets of strings, so they can be combined by the usual set operations of union, intersection, difference, and complement. • Also we can combine two languages L and M by forming the set of all concatenations of strings in L with strings in M.
Products of languages • This new language is called the product of L and M and is denoted by L M. • A formal definition can be given as follows: L M = {cat(s, t) | s L and t M} • For example, if L = {ab, ac} and M = {a, bc, abc}, then the product L•M is the language L M = {aba, abbc, ababc, aca, acbc, acabc}
Properties of products • The following simple properties hold for any language L: L {} = {} L = L L= L = • The product is not commutative. In other words, we can find two languages L and M such that L M M L • The product is associative. In other words, if L, M, and N are languages, then L (M N) = (L M) N
Powers of languages • If L is a language, then the product L L is denoted by L2. • The language product Ln for every n{0, 1, 2, …} is as follows: L0 = {} Ln = L Ln-1 if n > 0
Example For example, if L = {a, bb} then the first few powers of L are L0 = {} L1 = L = {a, bb} L2 = L L = {aa, abb, bba, bbbb} L3 = L L2 = {aaa, aabb, abba, abbbb, bbaa, bbabb, bbbba, bbbbbb}
Closure of a language • If L is a language over Σ (i.e.L Σ*) then the closure of L is the language denoted by L* and is defined as follows: L* = L0L1L2… • The positive closure of L is the language denoted by L+ and defined as follows: L+ = L1L2L3 …
L* vs. L+ • It follows that L* = L+ {}. But it’s not necessarily true that L+= L* - {} • For example, if we let our alphabet be Σ = {a} and our language be L = {, a}, then L+= L* • Can you find a condition on a language L such that L+ = L* - {}?
Closure of an alphabet The closure of Σ coincides with our definition of Σ* as the set of all strings over Σ. In other words, we have a nice representation of Σ* as follows: Σ* = Σ0Σ1Σ2….
Properties of closure Let L and M be languages over the alphabet Σ. Then: a) {}* = * = {} b)L* = L* L* = (L*)* c)L if and only if L+ = L* d)(L* M*)* = (L* M*)* = (L M)* e)L (M L)* = (L M)* L
Grammars • A grammar is a set of rules used to define the structure of the strings in a language. • If L is a language over an alphabet Σ, then a grammar for L consists of a set of grammar rules of the following form: • where and denote strings of symbols taken from Σ and from a set of grammar symbols (non-terminals) that is disjoint from Σ
Productions A grammar rule is often called a production, and it can be read in any of several ways as follows: replace by produces rewrites to reduces to
Where to begin …… • Every grammar has a special grammar symbol called a start symbol, and there must be at least one production with left side consisting of only the start symbol. • For example, if S is the start symbol for a grammar, then there must be at least one production of the form S
The 4 parts of a grammar • An alphabet N of grammar symbols called non-terminals. (Usually upper case letters.) 2. An alphabet T of symbols called terminals. (Identical to the alphabet of the resulting language.) 3. A specific non-terminal called the start symbol. (Usually S. ) 4. A finite set of productions of the form , where and are strings over the alphabet N T
Example Let Σ = {a, b, c}. Then a grammar for the language Σ* can be described by the following four productions: S S aS S bS S cS Or in shorthand: S | aS | bS | cS S can be replaced by either , or aS, or bS, or cS.
Grammar specifies the language If G is a grammar, then the language of G is the set of language strings derived from the start symbol of G. The language of G is denoted by: L(G)
Grammar specifies the language If G is a grammar with start symbol S and set of language strings T, then the language of G is the following set: L(G) = {s | s T* and S + s}
Finite languages If the language is finite, then a grammar can consist of all productions of the form S w for each string w in the language. For example, the language {a, ab} can be described by the grammar S a | ab.
Infinite languages • If the language is infinite, then some production or sequence of productions must be used repeatedly to construct the derivations. • Notice that there is no bound on the length of strings in an infinite language. • Therefore there is no bound on the number of derivation steps used to derive the strings. • If the grammar has n productions, then any derivation consisting of n + 1 steps must use some production twice
Infinite languages • For example, the infinite language {anb | n 0 } can be described by the grammar, S b | aS • To derive the string anb, use the production S aS • repeatedly --n times to be exact-- and then stop the derivation by using the production S b • The production S aS allows us to say If S derives w, then it also derives aw
Recursion • A production is called recursive if its left side occurs on its right side. • For example, the production S aS is recursive. • A production S is indirectly recursive if S derives (in two or more steps) a sentential form that contains S.
Indirect recursion • For example, suppose we have the following grammar: S b | aA A c | bS • The productions S aA and A bS are both indirectly recursive S aA abS A bS baA
Recursion • A grammar is recursive if it contains either a recursive production or an indirectly recursive production. • A grammar for an infinite language must be recursive! • However, a given language can have many grammars which could produce it.
Combining grammars • Suppose M and N are languages. We can describe them with grammars have disjoint sets of nonterminals. • Assign the start symbols for the grammars of M and N to be A and B, respectively: M : A N : B … … • Then we have the following rules for creating new languages and grammars:
Combining grammars, union rule The union of the two languages, M N, starts with the two productions S A | B followed by the grammars of M and N A … B …
Combining grammars, product rule Similarly, the language M N starts with the production S AB followed by, as above, A … B …
Combining grammars, closure rule Finally, the grammar for the closure of a language, M*, starts with the production S AS | followed by the grammar of M A …
Example, union Suppose we want to write a grammar for the following language: L = {, a, b, aa, bb, ..., an, bn, ..} L is the union of the two languages M = { an| n N} N = { bn| nN}