Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Python The Intersection Code The objective is to show that the intersection of two regular languages is regular. A DFA is easily complemented, so it

Python

The Intersection Code

The objective is to show that the intersection of two regular languages is regular. A DFA is easily complemented, so it is true that the intersection is regular by De Morgan's law, A AND B = NOT(NOT A OR NOT B). However the OR operation takes the two complemented DFA's and makes an NFA, which then has to be converted back to DFA's for the final complement. This can exponentiate the number of states.

In this exercise we build a intersection machine directly. It is in the sprit of the NFA to DFA construction, in that we will simulate the computation of the two DFAs in parallel. We create product machine that has states form as pars, (,)(s,t), were s is a state from the first machine, and t is a state from the second machine. To be in state (,)(s,t) means that on the input used up to that moment in the computation, the first machine would be in state s and the second in state t.

There are several possibilities for the accepting states of a product machine, but to calculate the intersection of the two languages, a state (,)(s,t) is accepting in the product machine, if s is accepting in the first machine and t is accepting in the second mahince.

def functions cartesian_product() , do_transitions() , and construct() to solve the sample test

class IntersectionDFA: """ given two DFA descriptions, create a DFA description that accepts the intersection of the languages of the given DFA alphabets must be the same the two DFA's presented are in our standard form; the output DFA makes the change that states are 2-tuples of states. since tupes are immuatable, as are strings, this change does not affect any coding. output: 'states':list(tuple(string,string)) 'alphabet':list(character) 'transitions':dict(tuple(tuple(string,string),character):tuple(string,string)) 'start':tuple(string,string) 'accept':list(tuple(string,string)) input: 'states':list(string) 'alphabet':list(character) 'transtions':dict(tuple(string,string):string) 'start':string 'accept':list(string) """ def __init__(self, dfa1, dfa2): self.dfa1 = dfa1 self.dfa2 = dfa2 self.states = [] self.alphabet = [] self.transitions = {} self.start = None # an empty 2-tuple should go here, but those do not exist self.accept = [] # the alphabets must be the same assert set(dfa1['alphabet']) == set(dfa2['alphabet'])

def cartesian_product(self,l1,l2): """ given l1, l2 each a list(string), return the cartesian product list(tuple(string,string)) of all pairs of strings, the first from the first list, the second from the second list """ pass # write code return res # replace None as well def do_transitions(self): """ create transitions of the Intersection DFA. - go through all state,letter pairs of the Intersection DFA - for each pair, refer to the transitions in dfa1 and dfa to find the resulting state in the Intersection DFA """ pass # write code def construct(self): """ construct the Intersection DFA. - what alphabet does it have - what start state does it have - what states does it have - what accept states does it have - what transitions does it have """ pass # write code return { 'states':self.states, 'alphabet':self.alphabet, 'transitions':self.transitions, 'start':self.start, 'accept':self.accept }

# a sample machine

X = { 'states':['X1','X2','X3','R'], 'alphabet':['a','b'], 'transitions':{ ('X1','b'):'X1',('X1','a'):'X2', ('X2','b'):'R',('X2','a'):'X3', ('X3','b'):'X3',('X3','a'):'R', ('R','a'):'R',('R','b'):'R' }, 'start':'X1', 'accept':['X3'] } Y = { 'states':['Y1','Y2','Y3','R'], 'alphabet':['a','b'], 'transitions':{ ('Y1','a'):'Y1',('Y1','b'):'Y2', ('Y2','a'):'R',('Y2','b'):'Y3', ('Y3','a'):'Y3',('Y3','b'):'R', ('R','a'):'R',('R','b'):'R' }, 'start':'Y1', 'accept':['Y3'] }

# a sample test

tests = [ ('aabb',True),('aabb',True), ('',False),('a',False),('b',False), ('bbbaa',False),('aabbb',False) ]

# want verbose verbose = True test_machine(IntersectionDFA(X,Y).construct(),tests)

# further testing ...

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

DATABASE Administrator Make A Difference

Authors: Mohciine Elmourabit

1st Edition

B0CGM7XG75, 978-1722657802

More Books

Students also viewed these Databases questions

Question

=+b. Based on the information given, what are the values of

Answered: 1 week ago

Question

What is the purpose of the Salary Structure Table?

Answered: 1 week ago

Question

What is the scope and use of a Job Family Table?

Answered: 1 week ago