Skip to content

hyperpolymath/betlang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

betlang

MPL-2.0 Palimpsest

A ternary probabilistic programming language for modeling uncertainty

betlang is a Domain-Specific Language (DSL) for probabilistic programming built on Racket. Its core primitive is the ternary bet - a choice between three values with associated probabilities. This simple yet powerful concept enables elegant expression of complex probabilistic models.

Features

Core Language

  • Ternary Bets: (bet A B C) - randomly select one of three values

  • Weighted Probabilities: (bet/weighted '(A 5) '(B 3) '(C 2)) - non-uniform distributions

  • Conditional Bets: Make decisions based on predicates

  • Lazy Evaluation: Only compute the selected branch

  • Composition Operators: Chain, compose, and combine bets

  • Statistical Utilities: Probability estimation, entropy, expected values

Rich Standard Library

Statistics (lib/statistics.rkt)

  • Descriptive statistics: mean, median, mode, variance, standard deviation

  • Correlation and covariance analysis

  • Statistical tests: chi-square, Kolmogorov-Smirnov

  • Resampling methods: bootstrap, jackknife

  • Time series: moving averages, exponential smoothing

  • Monte Carlo simulation utilities

Probability Distributions (lib/distributions.rkt)

  • Discrete: uniform, Bernoulli, binomial, geometric, Poisson, categorical, multinomial

  • Continuous: normal, exponential, gamma, beta, chi-square, Student’s t

  • Advanced: Weibull, Pareto, Cauchy, Laplace, Dirichlet

  • Stochastic Processes: random walks, Brownian motion, Lévy flights

Bayesian Inference (lib/bayesian.rkt)

  • Conjugate priors (Beta-Binomial, Normal-Normal)

  • MCMC: Metropolis-Hastings, Gibbs sampling

  • Importance sampling and rejection sampling

  • Approximate Bayesian Computation (ABC)

  • Credible intervals and Bayes factors

  • Posterior predictive distributions

Optimization (lib/optimization.rkt)

  • Simulated annealing

  • Genetic algorithms

  • Particle swarm optimization

  • Evolutionary strategies

  • Cross-entropy method

  • Hill climbing and random search

  • Ternary search

Advanced Sampling (lib/sampling.rkt)

  • Stratified sampling

  • Latin hypercube sampling

  • Quasi-random sequences (Sobol, Halton)

  • Sequential Monte Carlo (particle filters)

  • Hamiltonian Monte Carlo

  • Slice sampling

  • Variance reduction techniques

Markov Chains (lib/markov.rkt)

  • Discrete-time Markov chains

  • Transition matrix learning

  • Stationary distribution estimation

  • Hidden Markov Models (Viterbi)

  • Text generation with Markov chains

Combinators (lib/combinators.rkt)

  • Monadic operations: pure, bind, join

  • Error handling: try, retry, fallback

  • Performance: memoization, caching, throttling

  • Logical operations: and, or, xor

  • Advanced composition patterns

Ternary Logic (lib/ternary.rkt)

  • Kleene’s three-valued logic

  • Ternary operations: AND, OR, NOT, XOR

  • Majority voting and consensus

  • Higher-order functions for ternary values

  • Truth table generation

Tools

Interactive REPL (repl/shell.rkt)

  • Comprehensive help system (:help)

  • Session statistics tracking (:stats)

  • Command history (:history)

  • Built-in examples (:examples)

  • Error handling and pretty-printing

  • Persistent logging

Analysis Tools (tools/analyzer.rkt)

  • Comprehensive bet analysis

  • Strategy comparison

  • Convergence analysis

  • Text-based histograms

  • Probability reports

  • Entropy analysis over time

Benchmarks (benchmarks/performance.rkt)

  • 15 comprehensive performance tests

  • Core operations benchmarking

  • Distribution sampling performance

  • Statistical function benchmarks

Examples

Financial Modeling (examples/finance.rkt)

  • Stock price simulation (GBM)

  • Option pricing (Black-Scholes Monte Carlo)

  • Value at Risk (VaR) calculation

  • Credit risk modeling

  • Interest rate simulation

  • Portfolio optimization

  • Bond pricing

  • Market crash scenarios

  • 10+ complete examples

Monte Carlo Simulations (examples/monte-carlo.rkt)

  • Pi estimation

  • Buffon’s needle

  • Monte Carlo integration

  • European option pricing

  • Random walk analysis

  • Percolation simulation

  • Variance reduction techniques

Game Theory (examples/game-theory.rkt)

  • Rock-paper-scissors tournaments

  • Prisoner’s dilemma

  • Matching pennies

  • Battle of the sexes

  • Hawk-dove evolutionary dynamics

  • All-pay auctions

Probabilistic Data Structures (examples/probabilistic-structures.rkt)

  • Skip lists

  • Bloom filters

  • HyperLogLog cardinality estimation

  • Count-Min sketch

  • Reservoir sampling

  • Cuckoo hashing

  • Treaps

Basic Tutorial (examples/basic-tutorial.rkt)

  • Step-by-step introduction

  • Real-world examples

  • Customer service simulation

Quick Start

Installation

git clone https://github.com/hyperpolymath/betlang.git
cd betlang

Your First Bet

Start the REPL:

racket repl/shell.rkt

Try some bets:

betlang> (bet 1 2 3)
2

betlang> (bet 'heads 'tails 'edge)
heads

betlang> (bet/weighted '(common 7) '(uncommon 2) '(rare 1))
common

betlang> (bet-parallel 10 'win 'draw 'lose)
(win lose win draw win win lose draw win win)

Run Examples

= Financial modeling

racket examples/finance.rkt

= Monte Carlo simulations

racket examples/monte-carlo.rkt

= Game theory

racket examples/game-theory.rkt

= Tutorial

racket examples/basic-tutorial.rkt

Run Tests

racket tests/basics.rkt

Performance Benchmarks

racket benchmarks/performance.rkt

Documentation

  • [Tutorial](docs/tutorial.md) - Comprehensive tutorial from basics to advanced

  • [Semantics](docs/semantics.md) - Formal language semantics

  • [API Reference](docs/api-reference.md) - Complete API documentation

  • [Architecture](docs/architecture.md) - Project structure

  • [CLAUDE.md](CLAUDE.md) - AI assistant context

Language Philosophy

betlang embraces the ternary principle - fundamental operations involve three choices. This design:

  • Models three-way decisions naturally (win/draw/lose, yes/no/maybe)

  • Provides richer expressiveness than binary choices

  • Creates interesting emergent probabilistic properties

  • Inspired by musical ternary form (A-B-A)

Use Cases

  • Quantitative Finance: Option pricing, risk analysis, portfolio optimization

  • Statistical Modeling: Bayesian inference, hypothesis testing

  • Machine Learning: Probabilistic classification, sampling methods

  • Simulation: Monte Carlo methods, agent-based modeling

  • Game Theory: Strategic decision-making, evolutionary dynamics

  • Data Science: Resampling, bootstrapping, statistical analysis

  • Research: Probabilistic programming, stochastic processes

Project Statistics

  • Lines of Code: 6,000+

  • Libraries: 10+

  • Functions: 180+

  • Examples: 8 comprehensive example files

  • Documentation: 2,000+ lines

  • Test Cases: 25+

Requirements

  • Racket 7.0 or later

Contributing

Contributions are welcome! Please ensure: - Code follows Racket conventions - New features align with ternary philosophy - Tests are included - Documentation is updated

License

See LICENSE file for details.

Citation

If you use betlang in research, please cite:

@software{betlang2025,
  title={betlang: A Ternary Probabilistic Programming Language},
  author={betlang Contributors},
  year={2025},
  url={https://github.com/hyperpolymath/betlang}
}

Acknowledgments

Inspired by: - Musical ternary form (A-B-A) - Probabilistic programming languages - Racket’s expressiveness - Three-valued logic systems


Happy betting! 🎲

For questions, issues, or discussions, please open an issue on GitHub.