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" as definition.
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
98 cic:/CoRN/algebra/CSetoids/Properties_of_relations/A.var
101 inline procedural "cic:/CoRN/algebra/CSetoids/irreflexive.con" as definition.
103 inline procedural "cic:/CoRN/algebra/CSetoids/cotransitive.con" as definition.
105 inline procedural "cic:/CoRN/algebra/CSetoids/tight_apart.con" as definition.
107 inline procedural "cic:/CoRN/algebra/CSetoids/antisymmetric.con" as definition.
110 End Properties_of_relations
120 Unset Implicit Arguments.
125 (*#* **Definition of Setoid
127 Apartness, being the main relation, needs to be [CProp]-valued. Equality,
128 as it is characterized by a negative statement, lives in [Prop]. *)
130 inline procedural "cic:/CoRN/algebra/CSetoids/is_CSetoid.ind".
132 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid.ind".
135 cic:/matita/CoRN-Procedural/algebra/CSetoids/cs_crr.con
139 Implicit Arguments cs_eq [c].
143 Implicit Arguments cs_ap [c].
147 Infix "[=]" := cs_eq (at level 70, no associativity).
151 Infix "[#]" := cs_ap (at level 70, no associativity).
156 inline procedural "cic:/CoRN/algebra/CSetoids/cs_neq.con" as definition.
159 Implicit Arguments cs_neq [S].
163 Infix "[~=]" := cs_neq (at level 70, no associativity).
167 %\begin{nameconvention}%
168 In the names of lemmas, we refer to [ [=] ] by [eq], [ [~=] ] by
169 [neq], and [ [#] ] by [ap].
170 %\end{nameconvention}%
173 We want concrete lemmas that state the axiomatic properties of a setoid.
179 (* Begin_SpecReals *)
182 Section CSetoid_axioms
186 cic:/CoRN/algebra/CSetoids/CSetoid_axioms/S.var
189 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_is_CSetoid.con" as lemma.
191 inline procedural "cic:/CoRN/algebra/CSetoids/ap_irreflexive.con" as lemma.
193 inline procedural "cic:/CoRN/algebra/CSetoids/ap_symmetric.con" as lemma.
195 inline procedural "cic:/CoRN/algebra/CSetoids/ap_cotransitive.con" as lemma.
197 inline procedural "cic:/CoRN/algebra/CSetoids/ap_tight.con" as lemma.
205 (*#* **Setoid basics%\label{section:setoid-basics}%
206 %\begin{convention}% Let [S] be a setoid.
210 (* Begin_SpecReals *)
213 Section CSetoid_basics
217 cic:/CoRN/algebra/CSetoids/CSetoid_basics/S.var
223 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.
226 inline procedural "cic:/CoRN/algebra/CSetoids/ex_unq.con" as definition.
228 inline procedural "cic:/CoRN/algebra/CSetoids/eq_reflexive.con" as lemma.
230 inline procedural "cic:/CoRN/algebra/CSetoids/eq_symmetric.con" as lemma.
232 inline procedural "cic:/CoRN/algebra/CSetoids/eq_transitive.con" as lemma.
235 %\begin{shortcoming}%
236 The lemma [eq_reflexive] above is convertible to
237 [eq_reflexive_unfolded] below. We need the second version too,
238 because the first cannot be applied when an instance of reflexivity is needed.
239 (``I have complained bitterly about this.'' RP)
242 %\begin{nameconvention}%
243 If lemma [a] is just an unfolding of lemma [b], the name of [a] is the name
244 [b] with the suffix ``[_unfolded]''.
245 %\end{nameconvention}%
248 inline procedural "cic:/CoRN/algebra/CSetoids/eq_reflexive_unfolded.con" as lemma.
250 inline procedural "cic:/CoRN/algebra/CSetoids/eq_symmetric_unfolded.con" as lemma.
252 inline procedural "cic:/CoRN/algebra/CSetoids/eq_transitive_unfolded.con" as lemma.
254 inline procedural "cic:/CoRN/algebra/CSetoids/eq_wdl.con" as lemma.
256 (* Begin_SpecReals *)
258 inline procedural "cic:/CoRN/algebra/CSetoids/ap_irreflexive_unfolded.con" as lemma.
262 inline procedural "cic:/CoRN/algebra/CSetoids/ap_cotransitive_unfolded.con" as lemma.
264 inline procedural "cic:/CoRN/algebra/CSetoids/ap_symmetric_unfolded.con" as lemma.
267 %\begin{shortcoming}%
268 We would like to write
270 Lemma eq_equiv_not_ap : forall (x y:S), x [=] y Iff ~(x [#] y).
272 In Coq, however, this lemma cannot be easily applied.
273 Therefore we have to split the lemma into the following two lemmas [eq_imp_not_ap] and [not_ap_imp_eq].
277 inline procedural "cic:/CoRN/algebra/CSetoids/eq_imp_not_ap.con" as lemma.
279 inline procedural "cic:/CoRN/algebra/CSetoids/not_ap_imp_eq.con" as lemma.
281 inline procedural "cic:/CoRN/algebra/CSetoids/neq_imp_notnot_ap.con" as lemma.
283 inline procedural "cic:/CoRN/algebra/CSetoids/notnot_ap_imp_neq.con" as lemma.
285 inline procedural "cic:/CoRN/algebra/CSetoids/ap_imp_neq.con" as lemma.
287 inline procedural "cic:/CoRN/algebra/CSetoids/not_neq_imp_eq.con" as lemma.
289 inline procedural "cic:/CoRN/algebra/CSetoids/eq_imp_not_neq.con" as lemma.
291 (* Begin_SpecReals *)
300 Section product_csetoid
303 (*#* **The product of setoids *)
305 inline procedural "cic:/CoRN/algebra/CSetoids/prod_ap.con" as definition.
307 inline procedural "cic:/CoRN/algebra/CSetoids/prod_eq.con" as definition.
309 inline procedural "cic:/CoRN/algebra/CSetoids/prodcsetoid_is_CSetoid.con" as lemma.
311 inline procedural "cic:/CoRN/algebra/CSetoids/ProdCSetoid.con" as definition.
318 Implicit Arguments ex_unq [S].
322 Hint Resolve eq_reflexive_unfolded: algebra_r.
326 Hint Resolve eq_symmetric_unfolded: algebra_s.
330 Declare Left Step eq_wdl.
334 Declare Right Step eq_transitive_unfolded.
337 (* Begin_SpecReals *)
339 (*#* **Relations and predicates
340 Here we define the notions of well-definedness and strong extensionality
341 on predicates and relations.
343 %\begin{convention}% Let [S] be a setoid.
346 %\begin{nameconvention}%
347 - ``well-defined'' is abbreviated to [well_def] (or [wd]).
348 - ``strongly extensional'' is abbreviated to [strong_ext] (or [strext]).
350 %\end{nameconvention}%
354 Section CSetoid_relations_and_predicates
358 cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/S.var
365 At this stage, we consider [CProp]- and [Prop]-valued predicates on setoids.
367 %\begin{convention}% Let [P] be a predicate on (the carrier of) [S].
372 Section CSetoidPredicates
376 cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CSetoidPredicates/P.var
379 inline procedural "cic:/CoRN/algebra/CSetoids/pred_strong_ext.con" as definition.
381 inline procedural "cic:/CoRN/algebra/CSetoids/pred_wd.con" as definition.
384 End CSetoidPredicates
387 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_predicate.ind".
390 cic:/matita/CoRN-Procedural/algebra/CSetoids/csp_pred.con
393 inline procedural "cic:/CoRN/algebra/CSetoids/csp_wd.con" as lemma.
395 (*#* Similar, with [Prop] instead of [CProp]. *)
398 Section CSetoidPPredicates
402 cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CSetoidPPredicates/P.var
405 inline procedural "cic:/CoRN/algebra/CSetoids/pred_strong_ext'.con" as definition.
407 inline procedural "cic:/CoRN/algebra/CSetoids/pred_wd'.con" as definition.
410 End CSetoidPPredicates
413 (*#* ***Definition of a setoid predicate *)
415 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_predicate'.ind".
418 cic:/matita/CoRN-Procedural/algebra/CSetoids/csp'_pred.con
421 inline procedural "cic:/CoRN/algebra/CSetoids/csp'_wd.con" as lemma.
423 (* Begin_SpecReals *)
427 Let [R] be a relation on (the carrier of) [S].
428 %\end{convention}% *)
431 Section CsetoidRelations
435 cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CsetoidRelations/R.var
438 inline procedural "cic:/CoRN/algebra/CSetoids/rel_wdr.con" as definition.
440 inline procedural "cic:/CoRN/algebra/CSetoids/rel_wdl.con" as definition.
442 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext.con" as definition.
446 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_lft.con" as definition.
448 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_rht.con" as definition.
450 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_imp_lftarg.con" as lemma.
452 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strext_imp_rhtarg.con" as lemma.
454 inline procedural "cic:/CoRN/algebra/CSetoids/rel_strextarg_imp_strext.con" as lemma.
456 (* Begin_SpecReals *)
462 (*#* ***Definition of a setoid relation
463 The type of relations over a setoid. *)
465 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_relation.ind".
468 cic:/matita/CoRN-Procedural/algebra/CSetoids/csr_rel.con
471 (*#* ***[CProp] Relations
473 Let [R] be a relation on (the carrier of) [S].
478 Section CCsetoidRelations
482 cic:/CoRN/algebra/CSetoids/CSetoid_relations_and_predicates/CCsetoidRelations/R.var
485 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_wdr.con" as definition.
487 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_wdl.con" as definition.
489 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext.con" as definition.
493 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_lft.con" as definition.
495 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_rht.con" as definition.
497 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_imp_lftarg.con" as lemma.
499 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strext_imp_rhtarg.con" as lemma.
501 inline procedural "cic:/CoRN/algebra/CSetoids/Crel_strextarg_imp_strext.con" as lemma.
503 (* Begin_SpecReals *)
506 End CCsetoidRelations
509 (*#* ***Definition of a [CProp] setoid relation
511 The type of relations over a setoid. *)
513 inline procedural "cic:/CoRN/algebra/CSetoids/CCSetoid_relation.ind".
516 cic:/matita/CoRN-Procedural/algebra/CSetoids/Ccsr_rel.con
519 inline procedural "cic:/CoRN/algebra/CSetoids/Ccsr_wdr.con" as lemma.
521 inline procedural "cic:/CoRN/algebra/CSetoids/Ccsr_wdl.con" as lemma.
525 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdr.con" as lemma.
527 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdl.con" as lemma.
529 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdr_unfolded.con" as lemma.
531 inline procedural "cic:/CoRN/algebra/CSetoids/ap_wdl_unfolded.con" as lemma.
533 inline procedural "cic:/CoRN/algebra/CSetoids/ap_strext.con" as lemma.
535 inline procedural "cic:/CoRN/algebra/CSetoids/predS_well_def.con" as definition.
537 (* Begin_SpecReals *)
540 End CSetoid_relations_and_predicates
544 Declare Left Step ap_wdl_unfolded.
548 Declare Right Step ap_wdr_unfolded.
553 (*#* **Functions between setoids
554 Such functions must preserve the setoid equality
555 and be strongly extensional w.r.t.%\% the apartness, i.e.%\%
556 if [f(x,y) [#] f(x1,y1)], then [x [#] x1 + y [#] y1].
557 For every arity this has to be defined separately.
559 Let [S1], [S2] and [S3] be setoids.
562 First we consider unary functions. *)
564 (* Begin_SpecReals *)
567 Section CSetoid_functions
571 cic:/CoRN/algebra/CSetoids/CSetoid_functions/S1.var
575 cic:/CoRN/algebra/CSetoids/CSetoid_functions/S2.var
579 cic:/CoRN/algebra/CSetoids/CSetoid_functions/S3.var
583 Section unary_functions
587 In the following two definitions,
588 [f] is a function from (the carrier of) [S1] to
589 (the carrier of) [S2]. *)
592 cic:/CoRN/algebra/CSetoids/CSetoid_functions/unary_functions/f.var
595 inline procedural "cic:/CoRN/algebra/CSetoids/fun_wd.con" as definition.
597 inline procedural "cic:/CoRN/algebra/CSetoids/fun_strext.con" as definition.
601 inline procedural "cic:/CoRN/algebra/CSetoids/fun_strext_imp_wd.con" as lemma.
603 (* Begin_SpecReals *)
609 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_fun.ind".
612 cic:/matita/CoRN-Procedural/algebra/CSetoids/csf_fun.con
615 inline procedural "cic:/CoRN/algebra/CSetoids/csf_wd.con" as lemma.
619 inline procedural "cic:/CoRN/algebra/CSetoids/Const_CSetoid_fun.con" as definition.
621 (* Begin_SpecReals *)
624 Section binary_functions
628 Now we consider binary functions.
629 In the following two definitions,
630 [f] is a function from [S1] and [S2] to [S3].
634 cic:/CoRN/algebra/CSetoids/CSetoid_functions/binary_functions/f.var
637 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_wd.con" as definition.
639 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_strext.con" as definition.
643 inline procedural "cic:/CoRN/algebra/CSetoids/bin_fun_strext_imp_wd.con" as lemma.
645 (* Begin_SpecReals *)
651 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_bin_fun.ind".
654 cic:/matita/CoRN-Procedural/algebra/CSetoids/csbf_fun.con
657 inline procedural "cic:/CoRN/algebra/CSetoids/csbf_wd.con" as lemma.
659 inline procedural "cic:/CoRN/algebra/CSetoids/csf_wd_unfolded.con" as lemma.
661 inline procedural "cic:/CoRN/algebra/CSetoids/csf_strext_unfolded.con" as lemma.
663 inline procedural "cic:/CoRN/algebra/CSetoids/csbf_wd_unfolded.con" as lemma.
666 End CSetoid_functions
672 Hint Resolve csf_wd_unfolded csbf_wd_unfolded: algebra_c.
676 Implicit Arguments fun_wd [S1 S2].
680 Implicit Arguments fun_strext [S1 S2].
683 (* Begin_SpecReals *)
685 (*#* **The unary and binary (inner) operations on a csetoid
686 An operation is a function with domain(s) and co-domain equal.
688 %\begin{nameconvention}%
689 The word ``unary operation'' is abbreviated to [un_op];
690 ``binary operation'' is abbreviated to [bin_op].
691 %\end{nameconvention}%
699 Section csetoid_inner_ops
703 cic:/CoRN/algebra/CSetoids/csetoid_inner_ops/S.var
706 (*#* Properties of binary operations *)
708 inline procedural "cic:/CoRN/algebra/CSetoids/commutes.con" as definition.
710 inline procedural "cic:/CoRN/algebra/CSetoids/associative.con" as definition.
712 (*#* Well-defined unary operations on a setoid. *)
714 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_wd.con" as definition.
716 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_strext.con" as definition.
718 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_un_op.con" as definition.
720 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_un_op.con" as definition.
724 inline procedural "cic:/CoRN/algebra/CSetoids/id_strext.con" as lemma.
726 inline procedural "cic:/CoRN/algebra/CSetoids/id_pres_eq.con" as lemma.
728 inline procedural "cic:/CoRN/algebra/CSetoids/id_un_op.con" as definition.
733 cic:/matita/CoRN-Procedural/algebra/CSetoids/un_op_fun.con
738 (* Begin_SpecReals *)
740 inline procedural "cic:/CoRN/algebra/CSetoids/cs_un_op_strext.con" as definition.
744 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_wd_unfolded.con" as lemma.
746 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_strext_unfolded.con" as lemma.
748 (*#* Well-defined binary operations on a setoid. *)
750 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_wd.con" as definition.
752 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_strext.con" as definition.
754 (* Begin_SpecReals *)
756 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_bin_op.con" as definition.
758 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_bin_op.con" as definition.
762 inline procedural "cic:/CoRN/algebra/CSetoids/cs_bin_op_wd.con" as definition.
764 inline procedural "cic:/CoRN/algebra/CSetoids/cs_bin_op_strext.con" as definition.
766 (* Begin_SpecReals *)
771 cic:/matita/CoRN-Procedural/algebra/CSetoids/bin_op_bin_fun.con
778 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_wd_unfolded.con" as lemma.
780 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_strext_unfolded.con" as lemma.
782 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_wd_un_op_lft.con" as lemma.
784 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_wd_un_op_rht.con" as lemma.
786 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_strext_un_op_lft.con" as lemma.
788 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_is_strext_un_op_rht.con" as lemma.
790 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op2un_op_rht.con" as definition.
792 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op2un_op_lft.con" as definition.
794 (* Begin_SpecReals *)
797 End csetoid_inner_ops
803 Implicit Arguments commutes [S].
806 (* Begin_SpecReals *)
809 Implicit Arguments associative [S].
815 Hint Resolve bin_op_wd_unfolded un_op_wd_unfolded: algebra_c.
818 (*#* **The binary outer operations on a csetoid
820 Let [S1] and [S2] be setoids.
825 Section csetoid_outer_ops
829 cic:/CoRN/algebra/CSetoids/csetoid_outer_ops/S1.var
833 cic:/CoRN/algebra/CSetoids/csetoid_outer_ops/S2.var
837 Well-defined outer operations on a setoid.
840 inline procedural "cic:/CoRN/algebra/CSetoids/outer_op_well_def.con" as definition.
842 inline procedural "cic:/CoRN/algebra/CSetoids/outer_op_strext.con" as definition.
844 inline procedural "cic:/CoRN/algebra/CSetoids/CSetoid_outer_op.con" as definition.
846 inline procedural "cic:/CoRN/algebra/CSetoids/Build_CSetoid_outer_op.con" as definition.
848 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_wd.con" as definition.
850 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_strext.con" as definition.
855 cic:/matita/CoRN-Procedural/algebra/CSetoids/outer_op_bin_fun.con
860 inline procedural "cic:/CoRN/algebra/CSetoids/csoo_wd_unfolded.con" as lemma.
863 End csetoid_outer_ops
867 Hint Resolve csoo_wd_unfolded: algebra_c.
870 (* Begin_SpecReals *)
874 Let [S] be a setoid, and [P] a predicate on the carrier of [S].
883 cic:/CoRN/algebra/CSetoids/SubCSetoids/S.var
887 cic:/CoRN/algebra/CSetoids/SubCSetoids/P.var
890 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_crr.ind".
893 cic:/matita/CoRN-Procedural/algebra/CSetoids/scs_elem.con
896 (*#* Though [scs_elem] is declared as a coercion, it does not satisfy the
897 uniform inheritance condition and will not be inserted. However it will
898 also not be printed, which is handy.
901 inline procedural "cic:/CoRN/algebra/CSetoids/restrict_relation.con" as definition.
903 inline procedural "cic:/CoRN/algebra/CSetoids/Crestrict_relation.con" as definition.
905 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_eq.con" as definition.
907 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_ap.con" as definition.
911 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_equiv.con" as remark.
913 (* Begin_SpecReals *)
915 inline procedural "cic:/CoRN/algebra/CSetoids/subcsetoid_is_CSetoid.con" as lemma.
917 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid.con" as definition.
921 (*#* ***Subsetoid unary operations
923 Let [f] be a unary setoid operation on [S].
928 Section SubCSetoid_unary_operations
932 cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_unary_operations/f.var
935 inline procedural "cic:/CoRN/algebra/CSetoids/un_op_pres_pred.con" as definition.
939 Assume [pr:un_op_pres_pred].
940 %\end{convention}% *)
943 cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_unary_operations/pr.var
946 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op.con" as definition.
948 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op_wd.con" as lemma.
950 inline procedural "cic:/CoRN/algebra/CSetoids/restr_un_op_strext.con" as lemma.
952 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid_un_op.con" as definition.
955 End SubCSetoid_unary_operations
958 (*#* ***Subsetoid binary operations
960 Let [f] be a binary setoid operation on [S].
965 Section SubCSetoid_binary_operations
969 cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_binary_operations/f.var
972 inline procedural "cic:/CoRN/algebra/CSetoids/bin_op_pres_pred.con" as definition.
976 Assume [bin_op_pres_pred].
981 cic:/CoRN/algebra/CSetoids/SubCSetoids/SubCSetoid_binary_operations/pr.var
984 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op.con" as definition.
986 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op_well_def.con" as lemma.
988 inline procedural "cic:/CoRN/algebra/CSetoids/restr_bin_op_strext.con" as lemma.
990 inline procedural "cic:/CoRN/algebra/CSetoids/Build_SubCSetoid_bin_op.con" as definition.
992 inline procedural "cic:/CoRN/algebra/CSetoids/restr_f_assoc.con" as lemma.
995 End SubCSetoid_binary_operations
998 (* Begin_SpecReals *)
1009 Ltac Step_final x := apply eq_transitive_unfolded with x; Algebra.
1015 Tactic Notation "Step_final" constr(c) := Step_final c.
1018 (*#* **Miscellaneous
1021 inline procedural "cic:/CoRN/algebra/CSetoids/proper_caseZ_diff_CS.con" as lemma.
1024 Finally, we characterize functions defined on the natural numbers also as setoid functions, similarly to what we already did for predicates.
1027 inline procedural "cic:/CoRN/algebra/CSetoids/nat_less_n_fun.con" as definition.
1029 inline procedural "cic:/CoRN/algebra/CSetoids/nat_less_n_fun'.con" as definition.
1032 Implicit Arguments nat_less_n_fun [S n].
1036 Implicit Arguments nat_less_n_fun' [S n].