lemma 0.8.21

A pure, declarative language for business rules.
Documentation
spec rule_references
"""
Rule References

This example demonstrates how to reference other rules by name.
Rule references are resolved by name, looking up data first, then rules.
"""

data age                  : 25
data has_drivers_license  : true
data has_vehicle          : true
data license_is_suspended : false
data vehicle_is_insured   : true

rule is_of_legal_age:
  age >= 18

rule has_valid_license:
  has_drivers_license and not license_is_suspended

rule vehicle_is_ready:
  has_vehicle and vehicle_is_insured

rule can_drive_legally:
  is_of_legal_age and has_valid_license and vehicle_is_ready

rule driving_status:
  "Cannot drive"
  unless can_drive_legally then "Can drive legally"


spec eligibility_check
"""
Eligibility Check with Rule References

Shows complex rule composition and cross-rule dependencies.
"""

data criminal_record : false
data has_passport    : true
data has_visa        : false
data passport_valid  : true
data debt_amount     : number -> minimum 0 -> default 0
data user_age        : number -> minimum 0 -> maximum 120 -> default 30

rule is_adult:
  user_age >= 18

rule has_valid_passport:
  has_passport and passport_valid

rule has_valid_visa:
  has_visa

rule travel_documents_valid:
  has_valid_passport and has_valid_visa

rule background_check_passed:
  not criminal_record

rule financial_standing_good:
  debt_amount < 10_000

rule can_travel_internationally:
  is_adult and travel_documents_valid and background_check_passed and financial_standing_good
  unless not travel_documents_valid
    then veto "Valid travel documents required"

rule eligibility_message:
  "Not eligible"
  unless not has_valid_visa
    then "Valid passport but visa required"
  unless can_travel_internationally
    then "Eligible for international travel"