
package Logicals is

  type Logical is (True, False, Uncertain);

  function Value(Arg: Boolean) return Logical;
  function "not"(Arg: Logical) return Logical;
  function "and"(Left,Right: Logical) return Logical;
  function "and"(Left: Boolean; Right: Logical) return Logical;
  function "and"(Left: Logical; Right: Boolean) return Logical;
  function "or"(Left,Right: Logical) return Logical;
  function "or"(Left: Boolean; Right: Logical) return Logical;
  function "or"(Left: Logical; Right: Boolean) return Logical;
  function "xor" (Left,Right: Logical) return Logical;
  function "xor"(Left: Boolean; Right: Logical) return Logical;
  function "xor"(Left: Logical; Right: Boolean) return Logical;

  Not_Certain: exception;

  pragma Inline ("not");

end Logicals;
