1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
19 (* $Id.v,v 1.18 2002/11/25 14:43:42 lcf Exp $ *)
21 (*#* printing [=] %\ensuremath{\equiv}% #≡# *)
23 (*#* printing [~=] %\ensuremath{\mathrel{\not\equiv}}% #≠# *)
25 (*#* printing [#] %\ensuremath{\mathrel\#}% *)
27 (*#* printing ex_unq %\ensuremath{\exists^1}% #∃<sup>1</sup># *)
29 (*#* printing [o] %\ensuremath\circ% #⋅# *)
31 (*#* printing [-C-] %\ensuremath\diamond% *)
36 Definition of a constructive setoid with apartness,
37 i.e.%\% a set with an equivalence relation and an apartness relation compatible with it.
40 include "algebra/CLogic.ma".
42 include "tactics/Step.ma".
44 inline procedural "cic:/CoRN/algebra/CSetoids/Relation.con".
49 Implicit Arguments Treflexive [A].
53 Implicit Arguments Creflexive [A].
59 Implicit Arguments Tsymmetric [A].
63 Implicit Arguments Csymmetric [A].
67 Implicit Arguments Ttransitive [A].
71 Implicit Arguments Ctransitive [A].
77 Set Implicit Arguments.
81 Unset Strict Implicit.
86 (*#* **Relations necessary for Setoids
87 %\begin{convention}% Let [A:Type].
90 Notice that their type depends on the main logical connective.
94 Section Properties_of_relations
97 alias id "A" = "cic:/CoRN/algebra/CSetoids/Properties_of_relations/A.var".
99 inline procedural "cic:/CoRN/algebra/CSetoids/irreflexive.con".
101 inline procedural "cic:/CoRN/algebra/CSetoids/cotransitive.con".
103 inline procedural "cic:/CoRN/algebra/CSetoids/tight_apart.con".
105 inline procedural "cic:/CoRN/algebra/CSetoids/antisymmetric.con".
108 End Properties_of_relations
118 Unset Implicit Arguments.
123 (*#* **Definition of Setoid
125 Apartness, being the main relation, needs to be [CProp]-valued. Equality,
126 as it is characterized by a negative statement, lives in [Prop]. *)
128 inline procedural "cic:/CoRN/algebra/CSetoids/is_CSetoid.ind".
130 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid.ind".
133 cic:/matita/CoRN-Procedural/algebra/CSetoids/cs_crr.con
137 Implicit Arguments cs_eq [c].
141 Implicit Arguments cs_ap [c].
145 Infix "[=]" := cs_eq (at level 70, no associativity).
149 Infix "[#]" := cs_ap (at level 70, no associativity).
154 inline procedural "cic:/CoRN/algebra/CSetoids/cs_neq.con".
157 Implicit Arguments cs_neq [S].
161 Infix "[~=]" := cs_neq (at level 70, no associativity).
165 %\begin{nameconvention}%
166 In the names of lemmas, we refer to [ [=] ] by [eq], [ [~=] ] by
167 [neq], and [ [#] ] by [ap].
168 %\end{nameconvention}%
171 We want concrete lemmas that state the axiomatic properties of a setoid.
177 (* Begin_SpecReals *)
180 Section CSetoid_axioms
183 alias id "S" = "cic:/CoRN/algebra/CSetoids/CSetoid_axioms/S.var".
185 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_is_CSetoid.con".
187 inline procedural "cic:/CoRN/algebra/CSetoids/ap_irreflexive.con".
189 inline procedural "cic:/CoRN/algebra/CSetoids/ap_symmetric.con".
191 inline procedural "cic:/CoRN/algebra/CSetoids/ap_cotransitive.con".
193 inline procedural "cic:/CoRN/algebra/CSetoids/ap_tight.con".
201 (*#* **Setoid basics%\label{section:setoid-basics}%
202 %\begin{convention}% Let [S] be a setoid.
206 (* Begin_SpecReals *)
209 Section CSetoid_basics
212 alias id "S" = "cic:/CoRN/algebra/CSetoids/CSetoid_basics/S.var".
217 In `there exists a unique [a:S] such that %\ldots%#...#', we now mean unique with respect to the setoid equality. We use [ex_unq] to denote unique existence.
220 inline procedural "cic:/CoRN/algebra/CSetoids/ex_unq.con".
222 inline procedural "cic:/CoRN/algebra/CSetoids/eq_reflexive.con".
224 inline procedural "cic:/CoRN/algebra/CSetoids/eq_symmetric.con".
226 inline procedural "cic:/CoRN/algebra/CSetoids/eq_transitive.con".
229 %\begin{shortcoming}%
230 The lemma [eq_reflexive] above is convertible to
231 [eq_reflexive_unfolded] below. We need the second version too,
232 because the first cannot be applied when an instance of reflexivity is needed.
233 (``I have complained bitterly about this.'' RP)
236 %\begin{nameconvention}%
237 If lemma [a] is just an unfolding of lemma [b], the name of [a] is the name
238 [b] with the suffix ``[_unfolded]''.
239 %\end{nameconvention}%
242 inline procedural "cic:/CoRN/algebra/CSetoids/eq_reflexive_unfolded.con".
244 inline procedural "cic:/CoRN/algebra/CSetoids/eq_symmetric_unfolded.con".
246 inline procedural "cic:/CoRN/algebra/CSetoids/eq_transitive_unfolded.con".
248 inline procedural "cic:/CoRN/algebra/CSetoids/eq_wdl.con".
250 (* Begin_SpecReals *)
252 inline procedural "cic:/CoRN/algebra/CSetoids/ap_irreflexive_unfolded.con".
256 inline procedural "cic:/CoRN/algebra/CSetoids/ap_cotransitive_unfolded.con".
258 inline procedural "cic:/CoRN/algebra/CSetoids/ap_symmetric_unfolded.con".
261 %\begin{shortcoming}%
262 We would like to write
264 Lemma eq_equiv_not_ap : forall (x y:S), x [=] y Iff ~(x [#] y).
266 In Coq, however, this lemma cannot be easily applied.
267 Therefore we have to split the lemma into the following two lemmas [eq_imp_not_ap] and [not_ap_imp_eq].
271 inline procedural "cic:/CoRN/algebra/CSetoids/eq_imp_not_ap.con".
273 inline procedural "cic:/CoRN/algebra/CSetoids/not_ap_imp_eq.con".
275 inline procedural "cic:/CoRN/algebra/CSetoids/neq_imp_notnot_ap.con".
277 inline procedural "cic:/CoRN/algebra/CSetoids/notnot_ap_imp_neq.con".
279 inline procedural "cic:/CoRN/algebra/CSetoids/ap_imp_neq.con".
281 inline procedural "cic:/CoRN/algebra/CSetoids/not_neq_imp_eq.con".
283 inline procedural "cic:/CoRN/algebra/CSetoids/eq_imp_not_neq.con".
285 (* Begin_SpecReals *)
294 Section product_csetoid
297 (*#* **The product of setoids *)
299 inline procedural "cic:/CoRN/algebra/CSetoids/prod_ap.con".
301 inline procedural "cic:/CoRN/algebra/CSetoids/prod_eq.con".
303 inline procedural "cic:/CoRN/algebra/CSetoids/prodcsetoid_is_CSetoid.con".
305 inline procedural "cic:/CoRN/algebra/CSetoids/ProdCSetoid.con".
312 Implicit Arguments ex_unq [S].
316 Hint Resolve eq_reflexive_unfolded: algebra_r.
320 Hint Resolve eq_symmetric_unfolded: algebra_s.
324 Declare Left Step eq_wdl.
328 Declare Right Step eq_transitive_unfolded.
331 (* Begin_SpecReals *)
333 (*#* **Relations and predicates
334 Here we define the notions of well-definedness and strong extensionality
335 on predicates and relations.
337 %\begin{convention}% Let [S] be a setoid.
340 %\begin{nameconvention}%
341 - ``well-defined'' is abbreviated to [well_def] (or [wd]).
342 - ``strongly extensional'' is abbreviated to [strong_ext] (or [strext]).
344 %\end{nameconvention}%
348 Section CSetoid_relations_and_predicates
351 alias id "S" = "cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/S.var".
357 At this stage, we consider [CProp]- and [Prop]-valued predicates on setoids.
359 %\begin{convention}% Let [P] be a predicate on (the carrier of) [S].
364 Section CSetoidPredicates
367 alias id "P" = "cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CSetoidPredicates/P.var".
369 inline procedural "cic:/CoRN/algebra/CSetoids/pred_strong_ext.con".
371 inline procedural "cic:/CoRN/algebra/CSetoids/pred_wd.con".
374 End CSetoidPredicates
377 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_predicate.ind".
380 cic:/matita/CoRN-Procedural/algebra/CSetoids/csp_pred.con
383 inline procedural "cic:/CoRN/algebra/CSetoids/csp_wd.con".
385 (*#* Similar, with [Prop] instead of [CProp]. *)
388 Section CSetoidPPredicates
391 alias id "P" = "cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CSetoidPPredicates/P.var".
393 inline procedural "cic:/CoRN/algebra/CSetoids/pred_strong_ext'.con".
395 inline procedural "cic:/CoRN/algebra/CSetoids/pred_wd'.con".
398 End CSetoidPPredicates
401 (*#* ***Definition of a setoid predicate *)
403 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_predicate'.ind".
406 cic:/matita/CoRN-Procedural/algebra/CSetoids/csp'_pred.con
409 inline procedural "cic:/CoRN/algebra/CSetoids/csp'_wd.con".
411 (* Begin_SpecReals *)
415 Let [R] be a relation on (the carrier of) [S].
416 %\end{convention}% *)
419 Section CsetoidRelations
422 alias id "R" = "cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CsetoidRelations/R.var".
424 inline procedural "cic:/CoRN/algebra/CSetoids/rel_wdr.con".
426 inline procedural "cic:/CoRN/algebra/CSetoids/rel_wdl.con".
428 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext.con".
432 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_lft.con".
434 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_rht.con".
436 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_imp_lftarg.con".
438 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_imp_rhtarg.con".
440 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strextarg_imp_strext.con".
442 (* Begin_SpecReals *)
448 (*#* ***Definition of a setoid relation
449 The type of relations over a setoid. *)
451 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_relation.ind".
454 cic:/matita/CoRN-Procedural/algebra/CSetoids/csr_rel.con
457 (*#* ***[CProp] Relations
459 Let [R] be a relation on (the carrier of) [S].
464 Section CCsetoidRelations
467 alias id "R" = "cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CCsetoidRelations/R.var".
469 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_wdr.con".
471 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_wdl.con".
473 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext.con".
477 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_lft.con".
479 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_rht.con".
481 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_imp_lftarg.con".
483 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_imp_rhtarg.con".
485 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strextarg_imp_strext.con".
487 (* Begin_SpecReals *)
490 End CCsetoidRelations
493 (*#* ***Definition of a [CProp] setoid relation
495 The type of relations over a setoid. *)
497 inline procedural "cic:/CoRN/algebra/CSetoids/CCSetoid_relation.ind".
500 cic:/matita/CoRN-Procedural/algebra/CSetoids/Ccsr_rel.con
503 inline procedural "cic:/CoRN/algebra/CSetoids/Ccsr_wdr.con".
505 inline procedural "cic:/CoRN/algebra/CSetoids/Ccsr_wdl.con".
509 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdr.con".
511 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdl.con".
513 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdr_unfolded.con".
515 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdl_unfolded.con".
517 inline procedural "cic:/CoRN/algebra/CSetoids/ap_strext.con".
519 inline procedural "cic:/CoRN/algebra/CSetoids/predS_well_def.con".
521 (* Begin_SpecReals *)
524 End CSetoid_relations_and_predicates
528 Declare Left Step ap_wdl_unfolded.
532 Declare Right Step ap_wdr_unfolded.
537 (*#* **Functions between setoids
538 Such functions must preserve the setoid equality
539 and be strongly extensional w.r.t.%\% the apartness, i.e.%\%
540 if [f(x,y) [#] f(x1,y1)], then [x [#] x1 + y [#] y1].
541 For every arity this has to be defined separately.
543 Let [S1], [S2] and [S3] be setoids.
546 First we consider unary functions. *)
548 (* Begin_SpecReals *)
551 Section CSetoid_functions
554 alias id "S1" = "cic:/CoRN/algebra/CSetoids/CSetoid_functions/S1.var".
556 alias id "S2" = "cic:/CoRN/algebra/CSetoids/CSetoid_functions/S2.var".
558 alias id "S3" = "cic:/CoRN/algebra/CSetoids/CSetoid_functions/S3.var".
561 Section unary_functions
565 In the following two definitions,
566 [f] is a function from (the carrier of) [S1] to
567 (the carrier of) [S2]. *)
569 alias id "f" = "cic:/CoRN/algebra/CSetoids/CSetoid_functions/unary_functions/f.var".
571 inline procedural "cic:/CoRN/algebra/CSetoids/fun_wd.con".
573 inline procedural "cic:/CoRN/algebra/CSetoids/fun_strext.con".
577 inline procedural "cic:/CoRN/algebra/CSetoids/fun_strext_imp_wd.con".
579 (* Begin_SpecReals *)
585 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_fun.ind".
588 cic:/matita/CoRN-Procedural/algebra/CSetoids/csf_fun.con
591 inline procedural "cic:/CoRN/algebra/CSetoids/csf_wd.con".
595 inline procedural "cic:/CoRN/algebra/CSetoids/Const_CSetoid_fun.con".
597 (* Begin_SpecReals *)
600 Section binary_functions
604 Now we consider binary functions.
605 In the following two definitions,
606 [f] is a function from [S1] and [S2] to [S3].
609 alias id "f" = "cic:/CoRN/algebra/CSetoids/CSetoid_functions/binary_functions/f.var".
611 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_wd.con".
613 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_strext.con".
617 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_strext_imp_wd.con".
619 (* Begin_SpecReals *)
625 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_bin_fun.ind".
628 cic:/matita/CoRN-Procedural/algebra/CSetoids/csbf_fun.con
631 inline procedural "cic:/CoRN/algebra/CSetoids/csbf_wd.con".
633 inline procedural "cic:/CoRN/algebra/CSetoids/csf_wd_unfolded.con".
635 inline procedural "cic:/CoRN/algebra/CSetoids/csf_strext_unfolded.con".
637 inline procedural "cic:/CoRN/algebra/CSetoids/csbf_wd_unfolded.con".
640 End CSetoid_functions
646 Hint Resolve csf_wd_unfolded csbf_wd_unfolded: algebra_c.
650 Implicit Arguments fun_wd [S1 S2].
654 Implicit Arguments fun_strext [S1 S2].
657 (* Begin_SpecReals *)
659 (*#* **The unary and binary (inner) operations on a csetoid
660 An operation is a function with domain(s) and co-domain equal.
662 %\begin{nameconvention}%
663 The word ``unary operation'' is abbreviated to [un_op];
664 ``binary operation'' is abbreviated to [bin_op].
665 %\end{nameconvention}%
673 Section csetoid_inner_ops
676 alias id "S" = "cic:/CoRN/algebra/CSetoids/csetoid_inner_ops/S.var".
678 (*#* Properties of binary operations *)
680 inline procedural "cic:/CoRN/algebra/CSetoids/commutes.con".
682 inline procedural "cic:/CoRN/algebra/CSetoids/associative.con".
684 (*#* Well-defined unary operations on a setoid. *)
686 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_wd.con".
688 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_strext.con".
690 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_un_op.con".
692 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_un_op.con".
696 inline procedural "cic:/CoRN/algebra/CSetoids/id_strext.con".
698 inline procedural "cic:/CoRN/algebra/CSetoids/id_pres_eq.con".
700 inline procedural "cic:/CoRN/algebra/CSetoids/id_un_op.con".
705 cic:/matita/CoRN-Procedural/algebra/CSetoids/un_op_fun.con
710 (* Begin_SpecReals *)
712 inline procedural "cic:/CoRN/algebra/CSetoids/cs_un_op_strext.con".
716 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_wd_unfolded.con".
718 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_strext_unfolded.con".
720 (*#* Well-defined binary operations on a setoid. *)
722 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_wd.con".
724 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_strext.con".
726 (* Begin_SpecReals *)
728 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_bin_op.con".
730 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_bin_op.con".
734 inline procedural "cic:/CoRN/algebra/CSetoids/cs_bin_op_wd.con".
736 inline procedural "cic:/CoRN/algebra/CSetoids/cs_bin_op_strext.con".
738 (* Begin_SpecReals *)
743 cic:/matita/CoRN-Procedural/algebra/CSetoids/bin_op_bin_fun.con
750 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_wd_unfolded.con".
752 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_strext_unfolded.con".
754 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_wd_un_op_lft.con".
756 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_wd_un_op_rht.con".
758 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_strext_un_op_lft.con".
760 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_strext_un_op_rht.con".
762 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op2un_op_rht.con".
764 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op2un_op_lft.con".
766 (* Begin_SpecReals *)
769 End csetoid_inner_ops
775 Implicit Arguments commutes [S].
778 (* Begin_SpecReals *)
781 Implicit Arguments associative [S].
787 Hint Resolve bin_op_wd_unfolded un_op_wd_unfolded: algebra_c.
790 (*#* **The binary outer operations on a csetoid
792 Let [S1] and [S2] be setoids.
797 Section csetoid_outer_ops
800 alias id "S1" = "cic:/CoRN/algebra/CSetoids/csetoid_outer_ops/S1.var".
802 alias id "S2" = "cic:/CoRN/algebra/CSetoids/csetoid_outer_ops/S2.var".
805 Well-defined outer operations on a setoid.
808 inline procedural "cic:/CoRN/algebra/CSetoids/outer_op_well_def.con".
810 inline procedural "cic:/CoRN/algebra/CSetoids/outer_op_strext.con".
812 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_outer_op.con".
814 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_outer_op.con".
816 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_wd.con".
818 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_strext.con".
823 cic:/matita/CoRN-Procedural/algebra/CSetoids/outer_op_bin_fun.con
828 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_wd_unfolded.con".
831 End csetoid_outer_ops
835 Hint Resolve csoo_wd_unfolded: algebra_c.
838 (* Begin_SpecReals *)
842 Let [S] be a setoid, and [P] a predicate on the carrier of [S].
850 alias id "S" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/S.var".
852 alias id "P" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/P.var".
854 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_crr.ind".
857 cic:/matita/CoRN-Procedural/algebra/CSetoids/scs_elem.con
860 (*#* Though [scs_elem] is declared as a coercion, it does not satisfy the
861 uniform inheritance condition and will not be inserted. However it will
862 also not be printed, which is handy.
865 inline procedural "cic:/CoRN/algebra/CSetoids/restrict_relation.con".
867 inline procedural "cic:/CoRN/algebra/CSetoids/Crestrict_relation.con".
869 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_eq.con".
871 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_ap.con".
875 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_equiv.con".
877 (* Begin_SpecReals *)
879 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_is_CSetoid.con".
881 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid.con".
885 (*#* ***Subsetoid unary operations
887 Let [f] be a unary setoid operation on [S].
892 Section SubCSetoid_unary_operations
895 alias id "f" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_unary_operations/f.var".
897 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_pres_pred.con".
901 Assume [pr:un_op_pres_pred].
902 %\end{convention}% *)
904 alias id "pr" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_unary_operations/pr.var".
906 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op.con".
908 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op_wd.con".
910 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op_strext.con".
912 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid_un_op.con".
915 End SubCSetoid_unary_operations
918 (*#* ***Subsetoid binary operations
920 Let [f] be a binary setoid operation on [S].
925 Section SubCSetoid_binary_operations
928 alias id "f" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_binary_operations/f.var".
930 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_pres_pred.con".
934 Assume [bin_op_pres_pred].
938 alias id "pr" = "cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_binary_operations/pr.var".
940 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op.con".
942 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op_well_def.con".
944 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op_strext.con".
946 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid_bin_op.con".
948 inline procedural "cic:/CoRN/algebra/CSetoids/restr_f_assoc.con".
951 End SubCSetoid_binary_operations
954 (* Begin_SpecReals *)
965 Ltac Step_final x := apply eq_transitive_unfolded with x; Algebra.
971 Tactic Notation "Step_final" constr(c) := Step_final c.
977 inline procedural "cic:/CoRN/algebra/CSetoids/proper_caseZ_diff_CS.con".
980 Finally, we characterize functions defined on the natural numbers also as setoid functions, similarly to what we already did for predicates.
983 inline procedural "cic:/CoRN/algebra/CSetoids/nat_less_n_fun.con".
985 inline procedural "cic:/CoRN/algebra/CSetoids/nat_less_n_fun'.con".
988 Implicit Arguments nat_less_n_fun [S n].
992 Implicit Arguments nat_less_n_fun' [S n].