download
Logic10
v2.0
Logic10

Inleiding

Logic10 is een programma voor de toepassing van Booleaanse Algebra.
Het doet twee dingen:
    1. Genereren van waarheidstabellen uit formules
    2. Reductie van waarheidstabellen
Click [ HIER ] voor een inleiding in de Booleaanse Algebra.
Click [ HIER ] voor uitleg over het programmeren van waarheidstabelreductie(Engels)

Logic10 is handig bij de studie van de Booleaanse Algebra, het ontwerpen van digitale schakelingen
of propositielogica in het algemeen.

Dit is versie 2.0.
Hierin zijn alle bekende onvolkomenheden van de vorige versies opgelost.

Zo ziet Logic10 er in werking uit: (verkleind beeld)

Mogelijkheden

    - input :(Booleaanse Algebra) formule of waarheidstabel in CNF formaat
    - output : waarheidstabel in CNF of DNF formaat
    - bewaren en laden van alle input en output data
    - afdrukken van input en output.
    - in-line help informatie.

Installatie

Logic10 is geschreven voor Windows. De programmeertaal is Delphi.
Download Logic10 door op het download icoon (bliksem) bovenaan de pagina te klikken.
Er is geen installatieprocedure, kopieer simpelweg Logic10 naar een map.
De Windows registry wordt niet gewijzigd.

Menu selecties




Van links naar rechts:
    - openen van opgeslagen bestand
    - opslaan van tabellen en selecties
    - afdrukken van formules en tabellen
    - printer setup
    - help informatie
Boven de input box wordt de keuze gemaakt tussen Formule- of CNF tabel invoer.
Boven de output box wordt de keuze gemaakt tussen CNF of DNF output.
Ook kan worden aangegeven of de waarheidstabel gereduceerd moet worden.

Boven de Info box kunnen twee keuzes worden gemaakt:
één om de gevevens te tonen van het vertaalproces van de formules
en een andere om het reductieproces stap voor stap te tonen.

Formule invoer

Het invoer window voor formules telt 30 regels van elk 40 tekens.
Logische variabelen worden met een enkele letter A..Z aangegeven.
In een formule mogen maximaal 15 verschillende letters voorkomen.
Haakjes (...) geven prioriteit van een bewerking aan.
Maximale diepte van haakjes (((((((.... is 20.
Operatoren met hun prioriteit zijn:
    operatorprioriteitnaambeschrijving
    /6NOTNot
    .5ANDLogisch Product
    =4EQUGelijkheid
    -3XORLogisch verschil
    +2ORLogische som
    >1IMPImplicatie

Opmerkingen:

    1. tussen variabelen mag de "." AND operator weggelaten worden. Het programma voegt die zelf toe.
    2. dat geldt ook tussen variabelen en haakjes, zoals A( of )A
    3. en ook tussen ) ( wordt de . ingevoegd.

Voorbeelden:
A.B.C = ABC
A.(B+C) = A(B+C)
(A+B).(C+D) = (A+B)(C+D)

Opmerking:
In de Booleaanse Algebra wordt NOT (negatie) gewoonlijk aangegeven met een horizontaal streepje boven de variabele.
Op computerschermen is dat lastig weer te geven, zodat Logic10 het "/" teken voor de variabele plaatst.
Dus: wordt geschreven als /A en als /(AB)


Pas op:
Als een formule verdergaat op een volgende lijn en het laatste teken is geen operator
(. , + , - , =) dan voegt Logic10 de ". " toe, zodat deze formule:
    A+B
    C+D
    
wordt geïnterpreteerd as A+B.C + D

Tik control y om een regel te verwijderen.
Tik control n om een regel in te voegen.

Bewerkingen

De tabel hieronder toont alle bewerkingen:
    AB/AA.BA=BA-BA+BA>B
    00101001
    10000110
    01100111
    11011011

Waarheidstabel invoer

De tabel kan maximaal 100 regels lang zijn.
Begin met bovenaan de variabelen in te voeren, anders ontstaan foutmeldingen.
De tabel is in CNF vorm, dus elke regel is een AND van de variabelen, de regels onderling vormen OR's.
Voer een "0" in als de variabele / (not) voorkomt, voer een "1" in als er geen / voor de variabele staat.

Zodat deze tabel:
          A   B   C   D
          0       1   1
          1   1       0
de formule: /A C D + A B /D weergeeft.

Waarheidstabel uitvoer

Formule invoer:

Door de GO knop aan te klikken wordt de formule vertaald in een lijst met basisbewerkingen gesorteerd op prioriteit.
Een telwerk genereert alle waarden voor de voorkomende variabelen en substitueert ze in de formule.
Levert de formule "true" (1), dan worden de waardes aan de output waarheidstabel toegevoegd.

Als de reductie checkbox is gevinkt, dan wordt geprobeerd de tabel te vereenvoudigen.
De volgende regels worden daarbij toegepast:
    1.....A + A = A
    2.....A + AB =A
    3.....A/B + AB = A
    4.....A + /AB = A + B
    5.....A /B + BC ----> AC

Merk op, dat een formule zoals A + A een structuur weergeeft, want
ook formules als D/F + D/F of PQ/(X+Y+Z) + PQ/(X+Y+Z) hebben dezelfde structuur.
Een formule als A + /AB kan voorkomen als /(A+B+C)K + (A+B+C)K
en A/B + AB zit verstopt in A/BC/D + A/BCD.


Regel 5. is nieuw in versie 2.0 en vervangt oude regels 5. en 6.
In A/B + BC -------> AC heet AC een virtuele term.
A/B en BC zijn de parents van AC
Als AC = 1 dan is zeker A/B + BC = 1 maar het omgekeerde geldt niet.

Reductieregels 1..4 gelden ook voor virtuele termen met één uitzondering
    virtuele termen mogen hun ouders niet verwijderen
Later een paar voorbeelden van de kracht van virtuele termen in het reductieproces.

Waarheidstabel invoer

Bij klikken op de GO knop wordt de invoertabel naar de uitvoertabel gekopieerd.
Als reductie is gevinkt dan worden de reductieregels toegepast.

CNF en DNF

De uitvoertabel kan in de CNF of de DNF vorm staan.
CNF betekent "conjunctieve normaalvorm" wat er zo uitziet: ABC + DEF + GHI + .....
dus, AND's van individuele variabelen (met of zonder / ervoor), die worden geORed.

DNF betekent "disjunctieve normaalvorm", wat er zo uitziet: ( A+B+C)(D+E+F)(G+H+I)(....
dus, OR's van individuele variabelen (met of zonder / ) die geAND worden.

In de DNF mode voegt Logic10 juist variabelen aan de waarheidstabel toe als het resultaat false is.
De tabel wordt dan op de normale wijze vereenvoudigd, maar de resultaten worden in '"not" vorm weergegeven.
Een "0" wordt getoond als "1" en een "1" als "0".

Opm: cnf..........AB + BC = (A+C)(A+D)(B+C)(B+D)..........dnf
Dit is een direct gevolg van de tweede distributieve wet.(zie Inleiding Booleaanse Algebra)

Inconsistent

Een logische formule die nooit "true" oplevert, heet inconsistent.
Een eenvoudige inconsistentie is :......A./A
Logic10 rapporteert inconsistenties.

Tautologie

Een logische formule die altijd waar is heet een tautology.
Een eenvoudige tautologie is :........A + /A
Logic10 rapporteert tautologiën.

Bewaren en Laden

Klikken op het save icoon (disk schijf) , toont een dialoogwindow om de filenaam te selecteren.
Logic10 gebruikt geen file extensies (want daar zijn er al genoeg van) .
Voor het onderscheid echter wordt de filenaam voorafgegaan door logic10_.

Alle gegevens: invoer formule en tabel, uitvoer, en instellingen, worden in één file bewaard.

Klik op het map icoon om opgeslagen gegevens te laden.

Translate informatie

Als de xlate checkbox is gevinkt, dan wordt het vertaalproces getoond.
Hieronder staat een gedetailleerde afbeelding:
links staat de Postfix tabel, die de formule schrijft in de postfix notatie.
Een derde kolom geeft de prioriteit van de bewerking aan.

Uit de postfix tabel wordt de variabelen tabel gemaakt.

De rechter director tabel is het uiteindelijke resultaat van de vertaling.
Die tabel bevat alle bewerking gesorteerd op prioriteit.
De vier kolommen zijn:
    1. de bewerking
    2. het doel register
    3. operand1 register
    4. operand2 register
Algemeen formaat: doel register = operand1 ....bewerking....operand2

Opmerking: een register bevat een logische term zoals /ABC/DE/F

Door de variabelen op een waarde te zetten en de director tabel te doorlopen
wordt de formule geëvalueerd, dwz. de waarde true of false vastgesteld.

Scan informatie

Scannen van de waarheidstabel komt neer op het vergelijken van elke rij (of term) met elke andere term.
Index van de waarheidstabel zijn [ i ] en [ j ].
Dus waarheidstabel term [ i ] wordt vergeleken met term [ j ].
Die vergelijking levert vier (ja/nee) uitslagen op:

hi

Hole-i
Is true als [ i ] geen bepaalde variable heeft die wel aanwezig is in [ j ]
       A B C D E F 
[i]    0 0 x 0 x x
[j]    1 0 x 1 1 0   	  
  
Hierboven zijn E, F verwijderd in [ i ] maar niet in j, dus hi is true.

hj

Hole-j
Hier heeft [ j ] geen variable(n) die [ i ] wel heeft
         A B C D E F
[i]      1 x 1 1 0 0
[j]      0 x 0 x x x		 
  
[ j ] heeft geen D,E,F maar [ i ] wel, dus hj is true.

sb

Single bit betekent dat het het (logisch) verschil van [ i ] en [ j ] 1 bit bedraagt.
       A B C D E F
[i]    x 1 1 1 0 1
[j]    0 x 1 1 1 1		 
  
Alleen de E bits verschillen. Kolommen met een x (verwijderde variabele) tellen niet mee.
Dus, hierboven is sb true.

zb

Zero oftewel geen verschil
        A B C D E F
[i]     0 1 1 1 x 0
[j]     0 1 x 1 1 0		
  
kolommen met x tellen niet mee.
De andere kolommen moeten gelijk zijn.
Dus, zb is true.

hi(3) hj(2) sb(1) zb(0) vormen bits 3,2,1,0 van een code.
Deze code stuurt de logische bewerkingen van het reductieproces.

Enkele voorbeelden:

Reductie regel 1

AB/C + AB/C = AB/C
      A B C
[i]   1 1 0
[j]   1 1 0
  
Het verschil is 0 0 0.
hi, hj, sb zijn false (0), zb is true (1).
code = 1.
Dus , de [ j ] term wordt verwijderd.

Reductie regel 2

AB + ABC/D = AB
        A B C D
[i]     0 1 x x
[j]     0 1 1 0		
  
hi is true, hj is false, sb is false, zb is true.
code is 1001 = 9 (decimal).
[ j ] wordt verwijderd.

Reductie regel 3

A/BC + ABC = A
      A B C D E F
[i]   1 0 1 x x x
[j]   1 1 1 x x x	  
hi,hj,zb zijn false. sb is true (alleen B verschilt).
code is 2.
De B variabele in [i] wordt verwijderd en de gehele [ j ] term ook.

Reductie regel 4

AB + A/BC = AB + AC
      A B C 
[i]   1 1 x
[j]   1 0 1	  
hi , sb zijn true. zb, hj zijn false.
Het verschil bit B wordt verwijderd in [ j ].

Reductie regel 5, virtuele termen

AB + /BC levert virtuele term AC, die tijdelijk aan het scanproces meedoet.
      A B C
[i]   1 1 x
[j]   x 0 1	  
hi,hj,sb zijn true. zb is false. code 1110 = 14 decimal.
Actie :
Een scan wordt gestart die AC vergelijkt met alle termen in de waarheidstabel.
Regels 1..4 zijn van toepassing met de uitzondering dat de [i] en [j] termen niet verwijderd mogen worden.

Hieronder staat een afbeelding van een "normale" scan
En hier van een virtuele scan
VT betekent: virtuele term.
k is de index voor de waarheidstabel ( i , j zijn voor de normale scan)
Een virtuele term kan (met een term uit de waarheidstabel) weer een nieuwe virtuele term maken.
Die nieuwe virtuele termen worden even opgeslagen in een stack (eigenlijk FIFO buffer) voor latere verwerking.

In de waarheidstabel worden de parents van virtuele termen in rood afgebeeld.

Virtuele termen aan het werk

De introductie van virtuele termen maakte alle regels na 1..4 overbodig.
Eerst iets over het ontstaan van het idee.

Formule /BQ + /AP + AB bleek op te leveren na reductie: /B/PQ + AB + /AP + AQ

Dit resultaat is niet fout, maar de dikgedrukte term is overbodig ( evenals /P in /B/PQ)
De eerste gedachte was om een methode te bedenken die AQ kan opsporen en verwijderen,
maar een tweede gedachte was hoe van AQ gebruik kan worden gemaakt.
Het bleek, dat AQ het gevolg was van /BQ + AB, termen die alleen B verschillend hebben.

Dus, AQ is een soort representatie van /BQ + AB. Als AQ = 1 dan is zeker ook /BQ + AB = 1 maar het omgekeerde geldt niet.
AQ mag tijdelijk meedoen in het reductieproces en mag daarbij ook zelf gereduceerd worden.

Voor het bovenstaande geval: termen /BQ + AB maken virtuele term AQ.
Bij de vergelijking van AQ (virtueel) en AQ (tabel) wordt AQ verwijderd volgens regel 1.

Voorbeeld 1: /AZ + /BZ + /CZ + ABC = Z + ABC
/AZ + ABC ----> BCZ (virtueel)
BCZ + /BZ = CZ (virtuele term vereenvoudigd)
CZ + /CZ = Z...........en regels 1..4 maken het karwei af.

Voorbeeld 2: BC + /BP + ACPQ = BC + /BP
BC + /BP ----> CP (virtueel)
CP + ACPQ = CP........dus eliminatie ACPQ.

Voorbeeld 3: /B/PQ + AB + /AP + AQ................{zie hiervoor}
/AP + AQ ---> PQ (virtueel)
PQ + /B/PQ = /BQ...............variabele /P wordt geëlimineerd.
/BQ + AB ---> AQ (virtueel), elimineert AQ in de tabel.

Naschrift

De eerste versie van een waarheidstabel generator/vereenvoudiger schreef ik in 1991.
Toendertijd, tijdens de studie voor wiskundeleraar, werd bij het vak Logica een 10 in het vooruitzicht gesteld
voor een programma dat kon aantonen of een Booleaanse Algebra formule een inconsistentie of tautologie was.
Ik schreef het programma en kreeg de 10.
Begin 2013 ruimde ik wat oude spullen op en kwam de diskette met het Turbo Pascal programma tegen.
Het bleek nog te werken ook, ondanks het verouderde gebruikers-interface,
maar niet elke tabel werd helemaal gereduceerd.
Aan het werk dus, gebruikers interface herschreven en een paar nieuwe regels toegevoegd.
Dat was versie 1.2
Toch bleef het knagen dat in sporadische gevallen een waarheidstabel niet volledig werd gereduceerd.
Dankzij de invoering van virtuele termen lijkt dat nu wel het geval.

Donaties

Logic10 is freeware.
Mocht U commercieel gebruik maken van Logic10, overweeg dan een donatie voor mijn website.
Stuur a.u.b. even een email bericht voor de details.