lemma 0.8.20

A language that means business.
Documentation
repo spec_composition

spec base_config
"""
Base Pricing Configuration

Foundation pricing rules that can be referenced and customized.
"""

data standard_discount : 5%
data tax_rate          : 21%
data base_price        : number -> minimum 0 -> default 100

rule price_with_tax:
  base_price * (1 + tax_rate)

rule discounted_price:
  base_price * (1 - standard_discount)

rule final_price:
  base_price * (1 - standard_discount) * (1 + tax_rate)


spec wholesale
"""
Wholesale Pricing

Standalone wholesale pricing with its own defaults.
"""

data base_price        : 75
data standard_discount : 15%
data tax_rate          : 21%

rule price_with_tax:
  base_price * (1 + tax_rate)

rule discounted_price:
  base_price * (1 - standard_discount)

rule final_price:
  base_price * (1 - standard_discount) * (1 + tax_rate)

rule wholesale_final:
  final_price

rule margin_savings:
  100 - base_price


spec retail
"""
Retail Pricing

Standalone retail pricing with its own defaults.
"""

data base_price        : 120
data standard_discount : 0%
data tax_rate          : 21%

rule price_with_tax:
  base_price * (1 + tax_rate)

rule discounted_price:
  base_price * (1 - standard_discount)

rule final_price:
  base_price * (1 - standard_discount) * (1 + tax_rate)

rule retail_final:
  final_price

rule premium_multiplier:
  base_price / 100


spec line_item
"""
Order Line Item

Combines pricing with quantity calculations.
Demonstrates nested spec references and multi-level data access.
"""

data quantity : number -> minimum 0 -> default 10

uses pricing: base_config

rule line_total:
  pricing.final_price * quantity

rule has_discount:
  pricing.standard_discount > 0%


spec simple_order
"""
Simple Order

References an order line item and overrides its literal data.
Demonstrates literal bindings through nested spec references.
"""

uses line: line_item
with line.quantity : 100

rule order_total:
  line.line_total

rule effective_unit_price:
  order_total / line.quantity


spec multi_reference
"""
Multiple Page References

Shows multiple independent spec references in a single spec.
Demonstrates mixing different base specs for complex scenarios.
"""

uses base_config
uses retail
uses wholesale

rule avg_discount:
  (wholesale.standard_discount
  + retail.standard_discount
  + base_config.standard_discount)
  / 3

rule price_range:
  retail.retail_final
  - wholesale.wholesale_final

rule all_configs_loaded:
  wholesale.wholesale_final > 0 and retail.retail_final > 0 and base_config.final_price > 0