-definition excl ≝
- λl:directed.λa,b:dir_carr l.ap_apart (dir_carr l) a (dir_op l a b).
-
-lemma excess_of_directed: directed → excess.
-intro l; apply (mk_excess (dir_carr l) (excl l));
-[ intro x; unfold; intro H; unfold in H; apply (ap_coreflexive (dir_carr l) x);
- apply (ap_rewr ??? (dir_op l x x) (dir_op_refl ? x)); assumption;
-| intros 3 (x y z); unfold excl; intro H;
- cases (ap_cotransitive ??? (dir_op l (dir_op l x z) y) H) (H1 H2); [2:
- left; apply ap_symmetric; apply (dir_strong_extop ? y);
- apply (ap_rewl ???? (dir_op_comm ???));
- apply (ap_rewr ???? (dir_op_comm ???));
- assumption]
- cases (ap_cotransitive ??? (dir_op l x z) H1) (H2 H3); [left; assumption]
- right; apply (dir_strong_extop ? x); apply (ap_rewr ???? (dir_op_assoc ????));
- assumption]
+notation "a \cross b" left associative with precedence 50 for @{ 'op $a $b }.
+interpretation "semi lattice base operation" 'op a b = (cic:/matita/lattice/sl_op.con _ a b).
+
+lemma excess_of_semi_lattice_base: semi_lattice_base → excess.
+intro l;
+apply mk_excess;
+[1: apply mk_excess_;
+ [1:
+
+ apply (mk_excess_base (sl_carr l));
+ [1: apply (λa,b:sl_carr l.a # (a ✗ b));
+ |2: unfold; intros 2 (x H); simplify in H;
+ lapply (Ap≪ ? (sl_op_refl ??) H) as H1; clear H;
+ apply (ap_coreflexive ?? H1);
+ |3: unfold; simplify; intros (x y z H1);
+ cases (ap_cotransitive ??? ((x ✗ z) ✗ y) H1) (H2 H2);[2:
+ lapply (Ap≪ ? (sl_op_comm ???) H2) as H21;
+ lapply (Ap≫ ? (sl_op_comm ???) H21) as H22; clear H21 H2;
+ lapply (sl_strong_extop ???? H22); clear H22;
+ left; apply ap_symmetric; assumption;]
+ cases (ap_cotransitive ??? (x ✗ z) H2) (H3 H3);[left;assumption]
+ right; lapply (Ap≫ ? (sl_op_assoc ????) H3) as H31;
+ apply (sl_strong_extop ???? H31);]
+
+ |2:
+ apply apartness_of_excess_base;
+
+ apply (mk_excess_base (sl_carr l));
+ [1: apply (λa,b:sl_carr l.a # (a ✗ b));
+ |2: unfold; intros 2 (x H); simplify in H;
+ lapply (Ap≪ ? (sl_op_refl ??) H) as H1; clear H;
+ apply (ap_coreflexive ?? H1);
+ |3: unfold; simplify; intros (x y z H1);
+ cases (ap_cotransitive ??? ((x ✗ z) ✗ y) H1) (H2 H2);[2:
+ lapply (Ap≪ ? (sl_op_comm ???) H2) as H21;
+ lapply (Ap≫ ? (sl_op_comm ???) H21) as H22; clear H21 H2;
+ lapply (sl_strong_extop ???? H22); clear H22;
+ left; apply ap_symmetric; assumption;]
+ cases (ap_cotransitive ??? (x ✗ z) H2) (H3 H3);[left;assumption]
+ right; lapply (Ap≫ ? (sl_op_assoc ????) H3) as H31;
+ apply (sl_strong_extop ???? H31);]
+
+ |3: apply refl_eq;]
+|2,3: intros (x y H); assumption;]