X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground%2Flib%2Fstream_eq.ma;h=311930686057e113b7d20faecfa5cdb1513220e0;hp=425f91e825759d5b191a5470d851d295ff1530c9;hb=6604a232815858a6c75dd25ac45abd68438077ff;hpb=888840f6b3a71d3d686b53b702d362ab90ab0038 diff --git a/matita/matita/contribs/lambdadelta/ground/lib/stream_eq.ma b/matita/matita/contribs/lambdadelta/ground/lib/stream_eq.ma index 425f91e82..311930686 100644 --- a/matita/matita/contribs/lambdadelta/ground/lib/stream_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground/lib/stream_eq.ma @@ -15,57 +15,58 @@ include "ground/notation/relations/ringeq_3.ma". include "ground/lib/stream.ma". -(* STREAMS ******************************************************************) +(* EXTENSIONAL EQUIVALENCE FOR STREAMS **************************************) -coinductive eq_stream (A): relation (stream A) ≝ -| eq_seq: ∀t1,t2,b1,b2. b1 = b2 → eq_stream A t1 t2 → eq_stream A (b1⨮t1) (b2⨮t2) +coinductive stream_eq (A): relation (stream A) ≝ +| stream_eq_cons: ∀t1,t2,b1,b2. b1 = b2 → stream_eq A t1 t2 → stream_eq A (b1⨮t1) (b2⨮t2) . -interpretation "extensional equivalence (stream)" - 'RingEq A t1 t2 = (eq_stream A t1 t2). +interpretation + "extensional equivalence (streams)" + 'RingEq A t1 t2 = (stream_eq A t1 t2). -definition eq_stream_repl (A) (R:relation …) ≝ - ∀t1,t2. t1 ≗{A} t2 → R t1 t2. +definition stream_eq_repl (A) (R:relation …) ≝ + ∀t1,t2. t1 ≗{A} t2 → R t1 t2. -definition eq_stream_repl_back (A) (R:predicate …) ≝ - ∀t1. R t1 → ∀t2. t1 ≗{A} t2 → R t2. +definition stream_eq_repl_back (A) (R:predicate …) ≝ + ∀t1. R t1 → ∀t2. t1 ≗{A} t2 → R t2. -definition eq_stream_repl_fwd (A) (R:predicate …) ≝ - ∀t1. R t1 → ∀t2. t2 ≗{A} t1 → R t2. +definition stream_eq_repl_fwd (A) (R:predicate …) ≝ + ∀t1. R t1 → ∀t2. t2 ≗{A} t1 → R t2. -(* Basic inversion lemmas ***************************************************) +(* Basic inversions *********************************************************) -lemma eq_stream_inv_seq: ∀A,t1,t2. t1 ≗{A} t2 → - ∀u1,u2,a1,a2. a1⨮u1 = t1 → a2⨮u2 = t2 → - u1 ≗ u2 ∧ a1 = a2. +lemma stream_eq_inv_cons: ∀A,t1,t2. t1 ≗{A} t2 → + ∀u1,u2,a1,a2. a1⨮u1 = t1 → a2⨮u2 = t2 → + u1 ≗ u2 ∧ a1 = a2. #A #t1 #t2 * -t1 -t2 #t1 #t2 #b1 #b2 #Hb #Ht #u1 #u2 #a1 #a2 #H1 #H2 destruct /2 width=1 by conj/ qed-. -(* Basic properties *********************************************************) +(* Basic constructions ******************************************************) -corec lemma eq_stream_refl: ∀A. reflexive … (eq_stream A). -#A * #b #t @eq_seq // +corec lemma stream_eq_refl: ∀A. reflexive … (stream_eq A). +#A * #b #t @stream_eq_cons // qed. -corec lemma eq_stream_sym: ∀A. symmetric … (eq_stream A). +corec lemma stream_eq_sym: ∀A. symmetric … (stream_eq A). #A #t1 #t2 * -t1 -t2 -#t1 #t2 #b1 #b2 #Hb #Ht @eq_seq /2 width=1 by/ +#t1 #t2 #b1 #b2 #Hb #Ht @stream_eq_cons /2 width=1 by/ qed-. -lemma eq_stream_repl_sym: ∀A,R. eq_stream_repl_back A R → eq_stream_repl_fwd A R. -/3 width=3 by eq_stream_sym/ qed-. +lemma stream_eq_repl_sym: ∀A,R. stream_eq_repl_back A R → stream_eq_repl_fwd A R. +/3 width=3 by stream_eq_sym/ qed-. -(* Main properties **********************************************************) +(* Main constructions *******************************************************) -corec theorem eq_stream_trans: ∀A. Transitive … (eq_stream A). +corec theorem stream_eq_trans: ∀A. Transitive … (stream_eq A). #A #t1 #t * -t1 -t -#t1 #t #b1 #b * #Ht1 * #b2 #t2 #H cases (eq_stream_inv_seq A … H) -H -b -/3 width=7 by eq_seq/ +#t1 #t #b1 #b * #Ht1 * #b2 #t2 #H cases (stream_eq_inv_cons A … H) -H -b +/3 width=7 by stream_eq_cons/ qed-. -theorem eq_stream_canc_sn: ∀A,t,t1,t2. t ≗ t1 → t ≗ t2 → t1 ≗{A} t2. -/3 width=3 by eq_stream_trans, eq_stream_sym/ qed-. +theorem stream_eq_canc_sn: ∀A,t,t1,t2. t ≗ t1 → t ≗ t2 → t1 ≗{A} t2. +/3 width=3 by stream_eq_trans, stream_eq_sym/ qed-. -theorem eq_stream_canc_dx: ∀A,t,t1,t2. t1 ≗ t → t2 ≗ t → t1 ≗{A} t2. -/3 width=3 by eq_stream_trans, eq_stream_sym/ qed-. +theorem stream_eq_canc_dx: ∀A,t,t1,t2. t1 ≗ t → t2 ≗ t → t1 ≗{A} t2. +/3 width=3 by stream_eq_trans, stream_eq_sym/ qed-.