ABL(1)
π ABL β prefixed representation for boolean functions β¨
okay bestie so you've stumbled into ABL(1), part of the cao-vlsi reference manual, and honestly? it's giving "niche but iconic." it's all about representing boolean functions in a LISP-like way, and i'm gonna walk you through it. no cap. π«Ά
πΈ ORIGIN πΈ
this software belongs to the ALLIANCE CAD SYSTEM, developed by the ASIM team at the LIP6 laboratory of UniversitΓ© Pierre et Marie Curie, in Paris, France. π₯β¨
- Web :
http://asim.lip6.fr/recherche/alliance/ - E-mail :
alliance-users@asim.lip6.fr
like, they literally put their whole contact info in the manpage. respect. π
β¨ DESCRIPTION β¨
libablmmm.a is a library that lets you represent a boolean function in a LISP-like form. so basically: an ABL is a prefixed internal representation for a boolean function, and it's got all the standard operators β OR, NOR, NAND, XOR, NOT and AND. slay. π
an ABL is only made up of doublets. a doublet is composed of two fields which are accessible by the functionnal #define CAR and CDR. and a doublet is implemented with a MBK chain_list. periodt. π
Expression is the generic term for a boolean function represented by an ABL. an expression can be an atomic expression or an operator expression. the function f = a is represented by an atomic expression, whereas f = (or a b) is represented by an operator expression. ok so:
- an atomic expression is made up of a single doublet having the
NEXTpointer equal toNULLandDATApointer equal to the identifier pointer. - a constant atomic expression is an atomic expression having the string
"'0'"or"'1'"as identifier. β¨
an operator expression is more complicated than an atomic expression β main character energy, honestly. it's a list of items, the first item is the head operator of the expression and the following items are the arguments of the expression. it's possible to go trough the arguments by calling the functionnal #define CDR. then each argument is accessible by the functionnal #define CAR. an argument can be recursively an atomic or an operator expression. π
the arity of an operator expression is the number of arguments of the first level.
functions are divided into two groups:
- the low level functions are written with
#defineand are used to manage the ABL internal form. - the high level functions are used to manage the boolean expressions.
all functions are defined in the file "prefbib.c" (#define in "logmmm.h"). π
π¦ Functionnal #define π¦
ATOMβ checks the kind of an expression (atomic or operator expression). vibe check, basically.CARβ returns theDATApointer of a doublet.CADRβ returns theDATApointer of theNEXTpointer of a doublet.CDRβ returns theNEXTpointer of a doublet.OPERβ returns the operator number of an operator expression.VALUE_ATOMβ returns the associatedchar *of an atomic expression.
π Functions and procedures π
okay this is the long part, but every single one matters, so buckle up bestie π
addHExprβ adds a new arguments at the head of an operator expression.addQExprβ adds a new arguments at the queue of an operator expression.anyExprβ returns the value of a logicalORapplied on the results of the application of a function on the arguments of an operator expression.changeOperExprβ changes the operator of the head of an expression.charToOperβ converts an operator string into an operator number.copyExprβ copies an expression.createAtomβ creates an atomic expression.createBinExprβ creates a binary operator expression with an eventual merging of the operator.createExprβ creates the head of an operator expression.deleteNumExprβ removes the i-th argument in an operator expression.devXor2Exprβ convertsXOR 2to OR-AND.devXorExprβ removesXORin an expression.displayExprβ displays an expression in a prefixed notation.displayInfExprβ displays an expression in infixed notation.equalExprβ checks that two expressions are strictly equal.equalVarExprβ checks that two expressions are syntactically equal.everyExprβ returns the value of a logicalANDapplied on the results of the application of a function on the arguments of an operator expression.exprToCharβ converts an expression into a string.charToExprβ converts a string into an expression.flatArityExprβ flattens the operators of an expression.flatPolarityExprβ translates the inverters of an expression to the level of atomic expressions.freeExprβ frees an expression.identExprβ gives an identifier from an operator expression.lengthExprβ returns the number of arguments in an expression.mapCarExprβ creates a new expression by applying a function to all arguments of an operator expression.mapExprβ applies a procedure to all the arguments of an operator expression.maxExprβ returns the highest argument of an operator expression.minExprβ returns the lowest argument of an operator expression.normExprβ normalizes an expression.notExprβ complements an expression and eventually does a simplification.numberAtomExprβ returns the number of atoms in an expression.numberOccExprβ returns the number of time an atom appears in an expression.numberOperBinExprβ returns the number of equivalent binary operators in an expression.operToCharβ converts an operator number into an operator string.profExprβ returns the depth of an expression.profAOExprβ returns the depth of an expression without taking the inverters into account.searchExprβ searches for a specific atom in an expression.searchNumExprβ fetches the i-th argument in an operator expression.searchOperExprβ searches for an operator in an expression.simplif10Exprβ makes simplifications on an expression including constant atomic expressions.simplifNotExprβ makes simplifications on an expression including inverters.sortExprβ sorts an expression.substExprβ copies an expression by substituting a given atom by an expression.substPhyExprβ substitutes an atomic expression by an expression within an expression.supportChain_listExprβ returns the support of an expression in achain_list.supportPtype_listExprβ returns the support of an expression in aptype_list.wPMExprβ returns1if the pattern matching is possible between two expressions.
π SEE ALSO π
like, go read these next, iykyk π§
log(1), mbk(1), addHExpr(3), addQExpr(3), anyExpr(3), changeOperExpr(3), charToExpr(3), charToOper(3), copyExpr(3), createAtom(3), createBinExpr(3), createExpr(3), deleteNumExpr(3), devXor2Expr(3), devXorExpr(3), displayExpr(3), displayInfExpr(3), equalExpr(3), equalVarExpr(3), everyExpr(3), exprToChar(3), flatArityExpr(3), flatPolarityExpr(3), freeExpr(3), identExpr(3), lengthExpr(3), mapCarExpr(3), mapExpr(3), maxExpr(3), minExpr(3), notExpr(3), normExpr(3), numberAtomExpr(3), numberOccExpr(3), numberOperBinExpr(3), operToChar(3), profExpr(3), profAOExpr(3), searchExpr(3), searchNumExpr(3), searchOperExpr(3), simplif10Expr(3), simplifNotExpr(3), sortExpr(3), substExpr(3), substPhyExpr(3), supportChain_listExpr(3), supportPtype_listExpr(3). PMExpr(3).
π BUG REPORT π
this tool is under development at the ASIM department of the LIP6 laboratory. they literally need your feedback to improve documentation and tools β so like, if something's weird, tell them!! don't just suffer in silence bestie π«Ά
this is your moment to be the helpful mutual. feedback = self care. π
sign-off time, bestie: this lil masterpiece comes to you from ASIM/LIP6, dated October 1, 1997 β vintage, honestly. iconic then, iconic now. πππ¦
π¦ where this page comes from
- nixos 26.05: alliance 5.1.1-unstable-2025-02-24
- nixpkgs unstable: alliance 5.1.1-unstable-2025-02-24
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms