Advanced Search
Search Results
16 total results found
Chapter 2: The Anatomy of Unification
The word "unification" is borrowed from mathematical logic, where it names the process of finding a substitution that makes two expressions identical. That definition is precise and complete. The engineer who internalises it — rather than reaching for the comf...
Chapter 3: The Static Knowledge Base
Every inference engine requires a foundation of facts it treats as unconditionally true. In Prolog, this foundation is the Knowledge Base (KB): the complete set of facts and rules loaded into the WAM at any given moment. The correctness of every derivation the...
Chapter 4: Search and Backtracking
Prolog's execution model is not a function call graph. It is a search. Every query the engine receives is a problem statement — "find all substitutions for these variables that make this formula true" — and the engine's job is to explore the space of possible ...
Chapter 7: List Processing and Recursion
An imperative loop is a mutable index advancing through a mutable array under a termination condition checked at runtime. It has three moving parts — the counter, the array pointer, and the termination predicate — all of which can be wrong independently. It al...
Chapter 11: Parsing System Logs
/var/log/auth.log on a busy SSH-exposed host grows at several megabytes per day. A year's worth of auth logs on a cluster's edge node is routinely 2–10GB. The naive approach — read_file_to_string/3, then string_codes/2, then a DCG over the entire code list — a...
Chapter 14: Concurrent Logic & Message Passing
The single-threaded REPL is the correct environment for reasoning about static facts. It is the wrong environment for an infrastructure daemon that must simultaneously stream auth events from four hosts, respond to config mutation requests from the operator in...
Chapter 15: The CGO Bridge
An HTTP/REST boundary between a Go microservice and a Prolog inference engine introduces three costs that are unacceptable for microsecond-latency orchestration: TCP stack traversal, JSON serialisation and deserialisation on both sides, and the scheduling late...
Chapter 16: The Go-Log Concurrency Model
Chapter 15 established a single working CGO bridge: one goroutine, pinned to one OS thread, attaching one WAM engine context, executing one firewall_verdict/4 query at a time. Under the load profile of a single operator issuing manual policy checks, this is co...
Chapter 17: Tabling (SLG Resolution)
A Proxmox cluster with redundant network bridges is not a tree. It is a graph — specifically, a graph that contains cycles by design. SDN VLAN bridges redundantly connect hypervisors. Bonded uplinks form rings. Spine-leaf topologies are deliberately cyclic. Ev...
Chapter 1: The Sovereign Paradigm
Before a single line of Prolog is written, the engineer must understand why this technology is being chosen. Not because it is fashionable — it is decidedly not — but because it is correct for a specific class of infrastructure problem that imperative tools ha...
Chapter 5: The Command Oracle (ZFS & Proxmox)
Every administrative command issued against production infrastructure carries an implicit precondition: the system is in the state the operator believes it to be in. zpool replace requires the failing disk to be in the specified pool. qm clone requires the sou...
Chapter 6: Control Flow and The Cut (!)
Backtracking is Prolog's correctness mechanism: it exhausts all proof paths, guaranteeing that every solution is found. For general logic programming this is a virtue. For infrastructure control predicates — where a predicate must produce exactly one answer, w...
Chapter 8: Advanced Data Structures (Dicts)
Every infrastructure record is a named collection of typed fields: a host has a name, a MAC address, a RAM capacity, a storage layout, a cluster role. In the KB architecture of Chapters 1–7, these fields are encoded as positional arguments in compound terms: p...
Chapter 9: Meta-Programming & State Management
Prolog has one data type: the term. Rules, facts, queries, and data values are all terms. A clause physical_host('pve-node-01', 'AA:BB:CC:DD:EE:01', 256) is a term with functor physical_host and arity 3. A rule can_migrate(VM, Host) :- ... is a term with funct...
Chapter 12: Declarative Configuration
Every configuration management tool in production infrastructure does the same thing: it takes a template, substitutes variables, and writes a string to disk. Ansible's template module renders Jinja2. Puppet uses ERB. Terraform interpolates HCL. The output is ...
Chapter 10: Definite Clause Grammars (DCGs)
A regular expression is a finite automaton description encoded as a write-only string. The engineer who writes ^(\d{1,3}\.){3}\d{1,3}$ cannot debug it by reading it. The engineer who inherits it cannot modify it without first reverse-engineering what it was at...