(*--------------------------------------------------------------------------- This file axiomatises the inference rules of an intuitionistic logic and offers some parametric instances to make it straightforward to create a new logic that satisfies those axioms. The purpose is to factor out what the assertion logic and specification logic of a separation logic framework have in common. ---------------------------------------------------------------------------*)
Set Implicit Arguments.
Unset Strict Implicit.
Set Maximal Implicit Insertion.
(* The natural numbers in descending order. *)
Global Instance ge_Pre: PreOrder ge.
End ILogicEquiv2.
(* Most of the connectives in ILogicOps are redundant. They can be derived from lexists, lforall and limpl, and the choice of limpl is unique up to lequiv since it is an adjoint. *)
Section ILogicEquivOps.
Context {A : Type} `{IL: ILogic A}.

(* Specifications: *)
Lemma land_is_forall P Q :
P //\\ Q -|- Forall b : bool, if b then P else Q.
Lemma lor_is_exists P Q:
P \\// Q -|- Exists b : bool, if b then P else Q.
Lemma ltrue_is_forall:
ltrue -|- Forall x: Empty_set, Empty_set_rect _ x.
Lemma lfalse_is_exists:
lfalse -|- Exists x: Empty_set, Empty_set_rect _ x.