%------------------------------------------------------------------------------
tff(beverage_type,type,( beverage: $tType )).
tff(syrup_type,type,( syrup: $tType )).
tff(cup_of_type,type,( cup_of: $tType > $tType )).
tff(full_cup_type,type,( full_cup: beverage > cup_of(beverage) )).
tff(coffee_type,type,( coffee: beverage )).
tff(vanilla_type,type,( vanilla: syrup )).
tff(caramel_type,type,( caramel: syrup )).
tff(help_stay_awake_type,type,( help_stay_awake: cup_of(beverage) > $o )).

tff(mixture_type,type,(
    mixture: !>[BeverageOrSyrup: $tType] :
               ( ( BeverageOrSyrup * syrup ) > BeverageOrSyrup ) )).

%----Coffee keeps you awake
tff(mixture_of_coffee_help_stay_awake,axiom,(
    ! [S: syrup] : help_stay_awake(full_cup(mixture(beverage,coffee,S))) )).

%----Coffee mixed with a syrup or two helps you stay awake
tff(syrup_coffee_help_stay_awake,conjecture,(
    help_stay_awake(full_cup(
      mixture(beverage,coffee,mixture(syrup,caramel,vanilla)))) )).
%------------------------------------------------------------------------------