Skip to content

Instantly share code, notes, and snippets.

@vlad-ds
Created July 25, 2025 21:54
Show Gist options
  • Select an option

  • Save vlad-ds/da125e1614ec1112cd4703ba48acdebc to your computer and use it in GitHub Desktop.

Select an option

Save vlad-ds/da125e1614ec1112cd4703ba48acdebc to your computer and use it in GitHub Desktop.
Financial Operations Composition Framework - A layered approach to modeling economic operations

Financial Operations Composition Framework

Arithmetic Notation for Operation Composition

  • + = Sequential composition (A then B)
  • || = Parallel composition (A and B simultaneously)
  • = Conditional composition (A if condition, else B)
  • * = Repeated application (A × n times)
  • ~ = Reverse operation
  • = Transformation/mapping
  • = Null operation (no-op)
  • Σ = Summation over collection

Layer 0: Atomic Operations (Current System)

0.1 AddAsset

Purpose: Add physical assets (Cash, NonFinancialAsset) to balance sheet
Notation: AddAsset(asset, holder)
Constraint: No liability counterpart

0.2 AddAssetLiabilityPair

Purpose: Create financial instruments with both asset and liability sides
Notation: AddAssetLiabilityPair(instrument, creditor, debtor)
Constraint: Requires liability counterpart

0.3 ConsumeAsset

Purpose: Remove physical assets (consumption/disposal)
Notation: ConsumeAsset(asset, holder)
Constraint: Only for Cash, NonFinancialAsset

0.4 RemoveAssetLiabilityPair

Purpose: Settle financial obligations by removing both sides
Notation: RemoveAssetLiabilityPair(instrument, creditor, debtor)

0.5 TransferAsset

Purpose: Move assets between agents (simple for physical, claim transfer for financial)
Notation: TransferAsset(asset, from, to)

0.6 TransferAssetWithLiability

Purpose: Transfer asset + create new liability
Notation: TransferAssetWithLiability(asset, from, to, new_liability)
Composition: TransferAsset(asset, from, to) + AddAssetLiabilityPair(new_liability, from, to)

Layer 1: Basic Composite Operations

1.1 SplitAsset

Purpose: Divide one asset into multiple parts
Notation: SplitAsset(asset, ratios[], holders[])
Composition: ~ConsumeAsset(asset, original_holder) + Σ(AddAsset(asset_part[i], holder[i]))

1.2 MergeAssets

Purpose: Combine multiple identical assets
Notation: MergeAssets(assets[], target_holder)
Composition: Σ(ConsumeAsset(asset[i], holder[i])) + AddAsset(merged_asset, target_holder)

1.3 SwapAssets

Purpose: Direct bilateral asset exchange
Notation: SwapAssets(asset1, agent1, asset2, agent2)
Composition: TransferAsset(asset1, agent1, agent2) || TransferAsset(asset2, agent2, agent1)

1.4 PayWithAsset

Purpose: Use asset to settle a liability
Notation: PayWithAsset(payment_asset, liability, payer, payee)
Composition: TransferAsset(payment_asset, payer, payee) + RemoveAssetLiabilityPair(liability, payee, payer)

1.5 IssueAndDistribute

Purpose: Create new instruments and distribute to multiple holders
Notation: IssueAndDistribute(instrument_type, issuer, holders[], amounts[])
Composition: Σ(AddAssetLiabilityPair(instrument[i], holder[i], issuer))

Layer 2: Financial Market Operations

2.1 CollateralizedLoan

Purpose: Loan secured by transferring collateral
Notation: CollateralizedLoan(collateral, borrower, lender, loan)
Composition: TransferAsset(collateral, borrower, lender) + AddAssetLiabilityPair(loan, lender, borrower)

2.2 RepoTransaction

Purpose: Repurchase agreement
Notation: RepoTransaction(security, cash, seller, buyer, repo_term)
Composition: SwapAssets(security, seller, cash, buyer) + AddAssetLiabilityPair(repo_agreement, seller, buyer)

2.3 NetSettlement

Purpose: Cancel offsetting obligations
Notation: NetSettlement(claims[], counterclaims[], party1, party2)
Composition:

net = Σ(claims) - Σ(counterclaims)
(Σ(RemoveAssetLiabilityPair(claim[i])) || Σ(RemoveAssetLiabilityPair(counterclaim[j]))) +
(net > 0 ? AddAssetLiabilityPair(net_claim, party1, party2) : 
 net < 0 ? AddAssetLiabilityPair(net_claim, party2, party1) : ∅)

2.4 SecuritiesLending

Purpose: Lend securities for fee
Notation: SecuritiesLending(securities, lender, borrower, fee, collateral)
Composition:

TransferAsset(securities, lender, borrower) + 
TransferAsset(collateral, borrower, lender) +
AddAssetLiabilityPair(securities_loan, borrower, lender) +
AddAssetLiabilityPair(fee_obligation, borrower, lender)

2.5 MarginCall

Purpose: Demand additional collateral
Notation: MarginCall(required_collateral, borrower, lender, existing_loan)
Composition:

TransferAsset(required_collateral, borrower, lender) ⊕
ForceDefault(existing_loan, borrower, lender)

Layer 3: Corporate Finance Operations

3.1 EquityIssuance

Purpose: Issue shares for cash
Notation: EquityIssuance(share_amount, company, investors[], prices[])
Composition:

Σ(AddAssetLiabilityPair(shares[i], investor[i], company)) ||
Σ(TransferAsset(cash[i], investor[i], company))

3.2 DividendPayment

Purpose: Distribute profits to shareholders
Notation: DividendPayment(company, shareholders[], dividend_per_share)
Composition:

Σ(TransferAsset(cash[i], company, shareholder[i])) 
where cash[i] = shares_held[i] * dividend_per_share

3.3 ShareBuyback

Purpose: Company repurchases own shares
Notation: ShareBuyback(company, shareholders[], shares[], prices[])
Composition:

Σ(TransferAsset(cash[i], company, shareholder[i])) ||
Σ(RemoveAssetLiabilityPair(shares[i], shareholder[i], company))

3.4 DebtRestructuring

Purpose: Modify existing debt terms
Notation: DebtRestructuring(old_debt, new_terms, creditor, debtor)
Composition:

RemoveAssetLiabilityPair(old_debt, creditor, debtor) +
AddAssetLiabilityPair(new_debt, creditor, debtor)

3.5 ConvertibleBondConversion

Purpose: Convert bonds to equity
Notation: ConvertibleBondConversion(bonds, bondholder, company, conversion_ratio)
Composition:

RemoveAssetLiabilityPair(bonds, bondholder, company) +
AddAssetLiabilityPair(shares, bondholder, company)

Layer 4: Banking Operations

4.1 FractionalReserveLending

Purpose: Create loans based on deposits
Notation: FractionalReserveLending(bank, depositor, borrower, deposit_amount, reserve_ratio)
Composition:

AddAssetLiabilityPair(deposit, depositor, bank) +
AddAsset(reserves, bank) * reserve_ratio +
AddAssetLiabilityPair(loan, bank, borrower) * (1 - reserve_ratio)

4.2 InterbankLending

Purpose: Banks lend reserves overnight
Notation: InterbankLending(reserves, lending_bank, borrowing_bank, rate)
Composition:

TransferAsset(reserves, lending_bank, borrowing_bank) +
AddAssetLiabilityPair(overnight_loan, lending_bank, borrowing_bank)

4.3 BankRun

Purpose: Mass withdrawal scenario
Notation: BankRun(bank, depositors[], fraction_withdrawing)
Composition:

Σ(RemoveAssetLiabilityPair(deposit[i], depositor[i], bank)) * fraction_withdrawing ⊕
(insufficient_reserves ? CentralBankEmergencyLending(bank) : ∅)

4.4 SyndicatedLoan

Purpose: Multiple banks share large loan
Notation: SyndicatedLoan(borrower, lead_bank, participant_banks[], shares[])
Composition:

AddAssetLiabilityPair(master_loan, lead_bank, borrower) +
Σ(TransferAsset(loan_participation[i], lead_bank, participant_bank[i]))

Layer 5: Central Banking Operations

5.1 OpenMarketOperation

Purpose: Central bank buys/sells securities
Notation: OpenMarketOperation(central_bank, banks[], securities[], direction)
Composition:

direction = "buy" ? 
  Σ(SwapAssets(reserves, central_bank, securities[i], bank[i])) :
  Σ(SwapAssets(securities[i], central_bank, reserves, bank[i]))

5.2 QuantitativeEasing

Purpose: Large-scale asset purchases
Notation: QuantitativeEasing(central_bank, asset_types[], amounts[])
Composition:

Σ(AddAsset(reserves, central_bank)) +
Σ(TransferAsset(assets[i], market_participants[i], central_bank)) ||
Σ(TransferAsset(reserves, central_bank, market_participants[i]))

5.3 ReserveRequirementAdjustment

Purpose: Change required reserve ratios
Notation: ReserveRequirementAdjustment(banks[], old_ratio, new_ratio)
Composition:

new_ratio > old_ratio ?
  Σ(TransferAsset(additional_reserves[i], bank[i], central_bank)) :
  Σ(TransferAsset(excess_reserves[i], central_bank, bank[i]))

5.4 CentralBankDigitalCurrency

Purpose: Issue digital currency
Notation: CBDC_Issuance(central_bank, users[], amounts[])
Composition:

Σ(AddAssetLiabilityPair(cbdc[i], user[i], central_bank))

Layer 6: Complex Market Scenarios

6.1 LeveragedBuyout

Purpose: Acquire company using debt
Notation: LBO(target, acquirer, lenders[], equity_fraction)
Composition:

EquityIssuance(shares, acquirer, equity_investors, equity_amount) +
Σ(CollateralizedLoan(target_assets[i], acquirer, lender[i], loan[i])) +
TransferAsset(target_ownership, current_owners, acquirer)

6.2 CreditDefaultSwap

Purpose: Transfer credit risk
Notation: CDS(reference_asset, protection_buyer, protection_seller, premium)
Composition:

AddAssetLiabilityPair(cds_contract, protection_buyer, protection_seller) +
(Σ(TransferAsset(premium[t], protection_buyer, protection_seller)) * periods) +
(default_event ? TransferAsset(protection_payment, protection_seller, protection_buyer) : ∅)

6.3 Securitization

Purpose: Pool assets and issue tranched securities
Notation: Securitization(originator, assets[], spv, tranches[])
Composition:

Σ(TransferAsset(assets[i], originator, spv)) +
Σ(IssueAndDistribute(tranche[j], spv, investors[j], amounts[j]))

6.4 DerivativeClearing

Purpose: Central counterparty clearing
Notation: ClearDerivative(derivative, party1, party2, ccp)
Composition:

RemoveAssetLiabilityPair(derivative, party1, party2) +
AddAssetLiabilityPair(derivative_leg1, party1, ccp) +
AddAssetLiabilityPair(derivative_leg2, ccp, party2) +
TransferAsset(initial_margin1, party1, ccp) ||
TransferAsset(initial_margin2, party2, ccp)

Layer 7: System-Wide Events

7.1 FinancialCrisis

Purpose: Cascading defaults
Notation: FinancialCrisis(trigger_default, contagion_probability)
Composition:

ForceDefault(trigger_asset, debtor, creditor) +
Σ(exposure[i] > threshold[i] ? 
  FinancialCrisis(exposed_asset[i], contagion_probability * decay) : ∅)

7.2 BailOut

Purpose: Government rescue of financial institution
Notation: BailOut(government, failing_institution, amount)
Composition:

AddAssetLiabilityPair(government_bonds, government, bondholders) ||
TransferAsset(cash, bondholders, government) +
TransferAsset(cash, government, failing_institution) +
AddAssetLiabilityPair(equity_stake, government, failing_institution)

7.3 BailIn

Purpose: Convert liabilities to equity
Notation: BailIn(failing_bank, liability_holders[], conversion_ratios[])
Composition:

Σ(RemoveAssetLiabilityPair(liability[i], holder[i], failing_bank)) +
Σ(AddAssetLiabilityPair(equity[i], holder[i], failing_bank))

7.4 MarketCircuitBreaker

Purpose: Halt trading during extreme volatility
Notation: CircuitBreaker(market, trigger_condition)
Composition:

trigger_condition = true ?
  (All_Pending_Operations → ∅) + Wait(cooldown_period) : ∅

Layer 8: Regulatory Interventions

8.1 StressTest

Purpose: Simulate adverse scenarios
Notation: StressTest(banks[], scenarios[], required_capital_ratio)
Composition:

Σ(Σ(ApplyScenario(scenario[j], bank[i]))) +
Σ(capital_ratio[i] < required ? 
  CapitalRaising(bank[i], required - current) : ∅)

8.2 ResolutionRegime

Purpose: Orderly wind-down of failing institution
Notation: Resolution(failing_institution, resolution_authority)
Composition:

TransferAsset(critical_functions, failing_institution, bridge_bank) +
BailIn(failing_institution, subordinated_creditors, conversion_ratios) +
Σ(TransferAsset(good_assets[i], failing_institution, acquirers[i])) +
AddAsset(bad_assets, bad_bank)

8.3 MacroprudentialAdjustment

Purpose: System-wide regulatory changes
Notation: MacroprudentialPolicy(policy_type, banks[], parameters)
Composition:

policy_type = "countercyclical_buffer" ?
  Σ(AddAsset(additional_capital[i], bank[i])) :
policy_type = "ltv_limit" ?
  Σ(∀ new_loans: CollateralizedLoan.collateral/loan > ltv_limit) :
policy_type = "concentration_limit" ?
  Σ(∀ bank[i]: exposure_to_sector / total_assets < limit) : ∅

Example: Complete Economic Cycle

EconomicCycle = 
  // Expansion
  (FractionalReserveLending * n_loans) +
  (EquityIssuance * n_ipos) +
  (Securitization * n_pools) +
  
  // Peak
  (MarginCall * n_leveraged_positions) +
  (RepoTransaction * n_funding_needs) +
  
  // Contraction  
  (NetSettlement * n_counterparties) +
  (DebtRestructuring * n_distressed) +
  
  // Trough
  (BankRun ⊕ CentralBankEmergencyLending) +
  (FinancialCrisis(trigger, 0.6) ⊕ BailOut) +
  
  // Recovery
  (QuantitativeEasing + OpenMarketOperation) +
  (StressTest + CapitalRaising) +
  (ResolutionRegime * n_failed_institutions)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment