%------------------------------------------------------------------------------
thf(beverage_type,type,   beverage: $tType ).
thf(syrup_type,type,      syrup: $tType ).
thf(coffee_decl,type,     coffee: beverage ).
thf(vanilla_decl,type,    vanilla: syrup ).
thf(mix_decl,type,        mix: ( syrup > beverage ) > beverage ).
thf(heat_decl,type,       heat: beverage > beverage ).
thf(heated_mix_decl,type, heated_mix: ( syrup > beverage ) > beverage ).
thf(hot_decl,type,        hot: beverage > $o ).

thf(d_beverage_type,type, d_beverage: $tType ).
thf(d_syrup_type,type,    d_syrup: $tType ).
thf(d2beverage_decl,type, d2beverage: d_beverage > beverage ).
thf(d2syrup_decl,type,    d2syrup: d_syrup > syrup ).
thf(d_coffee_decl,type,   d_coffee: d_beverage ).
thf(d_vanilla_decl,type,  d_vanilla: d_syrup ).

thf(model,axiom,
    ( ! [B: beverage] : ? [DB: d_beverage] : ( B = ( d2beverage @ DB ) )
    & ! [DB: d_beverage] : ( DB = d_coffee )
    & ! [DB1: d_beverage,DB2: d_beverage] :
        ( ( ( d2beverage @ DB1 ) = ( d2beverage @ DB2 ) )
       => ( DB1 = DB2 ) )
    & ! [S: syrup] : ? [DS: d_syrup] : ( S = ( d2syrup @ DS ) )
    & ! [DS: d_syrup] : ( DS = d_vanilla )
    & ! [DS1: d_syrup,DS2: d_syrup] :
        ( ( ( d2syrup @ DS1 ) = ( d2syrup @ DS2 ) )
       => ( DS1 = DS2 ) )
    & ( coffee = ( d2beverage @ d_coffee ) )
    & ( vanilla = ( d2syrup @ d_vanilla ) )
    & ( ( heat @ ( d2beverage @ d_coffee ) ) = ( d2beverage @ d_coffee ) )
    & ( mix = ( ^ [F: syrup > beverage] : ( d2beverage @ d_coffee ) ) )
    & ( heated_mix
      = ( ^ [F: syrup > beverage] : ( d2beverage @ d_coffee ) ) )
    & ( hot @ ( d2beverage @ d_coffee ) ) ) ).

thf(verify,conjecture,
    ( ( heated_mix
      = ( ^ [F: syrup > beverage] : ( heat @ ( mix @ F ) ) ) )
    & ! [F: syrup > beverage] : ( hot @ ( heated_mix @ F ) )
    & ! [F: syrup > beverage] : ( ( heated_mix @ F ) = coffee )
    &  ~ ? [Mixture: syrup > beverage] :
           ~ ? [S: syrup] :
               ( ( ( Mixture @ S ) = coffee )
               & ( hot @ ( Mixture @ S ) ) ) ) ).
%------------------------------------------------------------------------------
