@prefix : <#> . @prefix log: . @prefix math: . @prefix string: . this log:forAll :x , :y , :z . # Some simple rules { :x math:sumOf ("3" "5") } log:implies { :x :valueOf "3 + 5" } . { :x math:differenceOf ("8" "3") } log:implies { :x :valueOf "8 - 3" } . { :x math:differenceOf ("8") } log:implies { :x :valueOf "8 - (error?)" } . { :x math:productOf ("5" "3" "2") } log:implies { :x :valueOf "5 * 3 * 2" } . { :x math:quotientOf ("7" "2") } log:implies { :x :valueOf "7 / 2" } . { :x math:remainderOf ("7" "2") } log:implies { :x :valueOf "7 % 2" } . { :x math:negationOf "3" } log:implies { :x :valueOf "3 negated" } . { "-3" math:negationOf :x } log:implies { :x :valueOf "what -3's the - of" } . { :x math:exponentiationOf ("2" "10") } log:implies { :x :valueOf "2^10" } . # A nested rule { :x math:sumOf ("3" [ math:differenceOf ("8" "3") ]) } log:implies { :x :valueOf "3 + (8 - 3)" } . # Getting the amount of members in a list { :x a :List; math:memberCount :y } log:implies { :x :memberCount :y } . ("x" "y" "z") a :List . # An example implementation: error flagging a list with too many members { :x a :TwoItemedList; math:memberCount [ math:notEqualTo "2" ] } log:implies { :x :hasAn :Error } . ("p" "q") a :TwoItemedList . ("p" "q" "r") a :TwoItemedList . # Big test { :x math:sumOf ([ math:quotientOf ("7" "2") ] [ math:exponentiationOf ([ math:remainderOf ("7" "2")] "10000000") ] [ is math:memberCount of ("a" "b" "c" "d" "e") ]) } log:implies { :x :valueOf "(7 / 2) + ((7 % 2)^10000000) + 5 [should be 9.5]" } . # For purging log:implies a log:Chaff . log:forAll a log:Chaff .