Tutorial: 3_regular.py

To run the below Python script, cd to the tutorial section of the respective plug-in and enter

$ python3 3_regular.py

at the command prompt. The script will read input data from ./tutorial/data/ and write its output to ./tutorial/tmp_*.

## Test/demonstrate core faudes generator functions

## import our module (lazy all global)
from faudes import *

## ##########################################
## Deterministic
## ##########################################

## Announce
print("################# Deterministic")

## Convert nondeterministic generator
g   = Generator("data/deterministic_nondet.gen")
g_d = Deterministic(g)
g.Write()
g_d.Write()

## Record test case
TestDump("deterministic",g_d)

## ##########################################
## State Minimisation
## ##########################################

## Announce
print("################# State Minimisation")

## Convert non minimal generator
g  = Generator("data/minimal_nonmin.gen")
g.Write()
StateMin(g)
g.Write()

## Record test case
TestDump("statemin",g)

## ##########################################
## Natural Projection
## ##########################################

## Announce
print("################# Projection")

g    = Generator("data/project_g.gen")
sig0 = EventSet.NewFromList(['a', 'c', 'e', 'g'])
g0   = Project(g,sig0)

## Report
g.Write()
sig0.Write()
g0.Write()

## Record test case
TestDump("project",g0)

## ##########################################
## Boolean Operations
## ##########################################

## Announce
print("################# Boolean Operations")

## Union
g1  = Generator("data/boolean_g1.gen")
g2  = Generator("data/boolean_g2.gen")
g_or = Generator()
g_or.StateNamesEnabled(False)
LanguageUnion(g1, g2, g_or)
  
## Intersection
g_and = Generator()
g_and.StateNamesEnabled(False)
LanguageIntersection(g1, g2, g_and)
  
## Test: perform complement twice
g1_not=g1.Copy() 
g1_not.StateNamesEnabled(False)
LanguageComplement(g1_not)
g1_notnot=g1_not.Copy()
LanguageComplement(g1_notnot)
  
##  Write results
g1.Write("tmp_boolean_g1.gen")
g2.Write("tmp_boolean_g2.gen")
g_or.Write("tmp_union_g1g2.gen")
g_and.Write("tmp_intersection_g1g2.gen")
g1_not.Write("tmp_complement_g1.gen")
g1_notnot.Write("tmp_complement2_g1.gen")

## Record test case
TestDump("lang. union",g_or)
TestDump("lang. intersection",g_and)
TestDump("lang. complement",g1_not)
TestDump("lang. complement2",g1_notnot)

## Inspect on console

print("################# Results:")
g_or.DWrite()
g_and.DWrite()
g1_not.DWrite()

## Compare languages

print("################# Compare:")
if LanguageInclusion(g1,g_or):
  print("Lm(g1) <= Lm(g1) v Lm(g2) : OK")
else:
  print("Lm(g1) > Lm(g1) v Lm(g2) : ERR")

if LanguageDisjoint(g1_not,g1):
  print("Lm(g1) ^ ~Lm(g1) = empty : OK")
else:
  print("(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty : ERR")

if LanguageEquality(g1,g1_notnot):
  print("Lm(g1) = ~~Lm(g1) : OK")
else:
  print("Lm(g1) != ~~Lm(g1) : ERR")

## Record test case

TestDump("lang. inclusion",LanguageInclusion(g1,g_or))
TestDump("lang. disjoint",LanguageDisjoint(g1_not,g1))
TestDump("lang. equality",LanguageEquality(g1,g1_notnot))


## ##########################################
## Concatenation/Kleene-Closure
## ##########################################

## Announce
print("################# Concatenation/Kleene-Closure")

## Read K and L
gk = Generator("data/concat_gk.gen")
gl = Generator("data/concat_gl.gen")

## Version 1: std functions
k_l_star_1 = Generator(gl)
KleeneClosure(k_l_star_1)
LanguageConcatenate(gk,k_l_star_1,k_l_star_1)
StateMin(k_l_star_1,k_l_star_1)

## Version 2: use non-deterministic intermediate results, disable state names
k_l_star_2 = Generator(gl)
k_l_star_2.StateNamesEnabled(False)
KleeneClosureNonDet(k_l_star_2)
LanguageConcatenateNonDet(gk,k_l_star_2,k_l_star_2)
Deterministic(k_l_star_2,k_l_star_2)
StateMin(k_l_star_2,k_l_star_2)

## Compare results
ok = LanguageEquality(k_l_star_1,k_l_star_2)

## Inspect on console

print("################# Results:")
k_l_star_1.SWrite()
k_l_star_2.SWrite()
if ok:
  print("results match : OK")
else:  
  print("results dont match : ERROR")

## Graphical output
## gk.GraphWrite("tmp_concat_gk.png")
## gl.GraphWrite("tmp_concat_gl.png")
## k_l_star_1.StateNamesEnabled(False)
## k_l_star_1.GraphWrite("tmp_concat_k_l_star_1.png")
## k_l_star_2.GraphWrite("tmp_concat_k_l_star_2.png")


## Record test case
TestDump("lang. concat",k_l_star_1)
TestDump("lang. concat",k_l_star_2)
TestDump("lang. concat",ok)

## validate test case
TestDiff()


 

 

libFAUDES 2.34g --- 2026.03.30 --- with "omegaaut-synthesis-observer-observability-diagnosis-hiosys-iosystem-multitasking-coordinationcontrol-timed-simulator-iodevice-priorities-luabindings-hybrid-example-pybindings"