Untitled
unknown
plain_text
5 months ago
3.1 kB
6
Indexable
# for(i=1;i<=n;i++) # for(j=1;j<=n;j++) # a[i][j] = a[i][j+1]; #krok 1 #relacja zaleznosci R:=[n]-> {[i, j] -> [i, j+1] : 2 <= i <= n and 0 < j <= n }; print "R"; R; # przestrzen iteracji LD:=[n]->{[i, j] : 2 <= i <= n && 0 <= j <= n }; ##uwaga: PET zazwyczaj produkuje krotki z nazwami, przykładowo S_0[i,j] ## w takim przypadku pierwsza krotka relacji CODE_SYNCH_FREE także powinna # być z nazwą czyli S_0[i,j] ## lub trzeba usunąć nazwę S_0 w krotce LD jeśli krotki CODE_SYNCH_FREE są bez nazw print "LD"; LD; #krok 3- poczatki krancowe UDS:= domain R - range R; print "UDS"; UDS; #krok 4 - tworzenie relacji R_USC wedlug wzoru ## R_USC := { [e] -> [e’] | e, e’ in UDS & e > e’ & e’ in (R+ ##R+^-1)(e) } #4.1 tworzymy relacja R1:={[e]->[e']}, gdzie e=(i1,i2) e'=i1',i2' R1:={[i1,i2]->[i1',i2']}; ## 4.2 twozymy relacje; R2, implementujaca warunek: domain i range ## R1 nalezy do UDS R2:=(R1*UDS)->*UDS; print "R2"; R2; scan (R2* [n]->{:n=6}); ##4.3 tworzymy relacje m, dla ktorej elementy dziedziny sa ##leksykograficznie mniejsze niz elementy zakresu: e<e' S:={[i1,i2]}; m:=S<<S; print "m"; m; R3:=R2*m; print "R3"; R3; scan (R3* [n]->{:n=6}); ##4.4 implementujemy warunek e' in (R+ + R+^-1)(e) RR:=R^+ + (R^+)^-1; print "RR"; RR; e:=[i1,i2]->{[i1,i2]}*UDS; SET:=RR(e); print "SET"; SET; scan (SET* [n]->{:n=6}); ##4.5 R_USC:=R3->*SET; print "R_USC"; R_USC; #krok 5 - topologia grafu -lancuch ## poniewaz relacja R_USC jest pusta ##[n, i1, i2] -> { } #krok 6 tworzenie zbioru zawierajacego punkty reprezentatywne #niezaleznych fragmentow kodu REPR:=UDS +(LD -(domain R +range R)); print "REPR"; REPR; #krok 7 - obliczenie zbioru SLICES ## obliczenie pozytywnego tranzytywnego domkniecia realcji R R_PLUS:=R^+; print "R_PLUS"; R_PLUS; #obliczenie tranzytywnego domkniecia, R_STAR R_STAR:=R_PLUS + {[i1,i2]->[i1,i2]}; ## tworzymy sparametrzyzowany punkt reprezentatywny, I I:=[i1,i2]->{[i1,i2]}*REPR; ## obliczamy wynik zastosowania R_STAR do punktu reprezentatywnego #I, S S:=R_STAR(I); print "S"; S; scan (S*[n]->{:n=6}); ## krok 7 - Tworzenie zbioru SLICES #tworzymy zbior SLICES poprzez przeniesienie parametrow i1,i2 zbioru S na ## pierwsze pozycje kazdej krotki zbioru S: SLICES:= [n] -> { [i1,i2,i1, i1'] : i2 = 1 and n >= 2 and 0 < i1 <= n and 2 <= i1' <= n; [i1,i2,1, 1] : i2 = 1 and n = 1 and i1 = 1; [i1,i2, i1, 1] : i2 = 1 and n >= 2 and 0 < i1 <= n }; print "SLICES"; SLICES; ##krok 8 scan (SLICES*[n]->{:n=6}); ## krok 9 - wygenerowanie pseudokodu ##dla starszych wersji kalkulatora iscc # codegen SLICES; ##dla nowszych i starszych wersji kalkulatora iscc codegen (identity SLICES); #i=1, 0<j<n u 2<i<n, j-n-1 ## krok 10 generowanie kodu kompilowalnego #if (n >= 2) # #pragma parallel for # for (int c0 = 1; c0 <= n; c0 += 1) # for (int c3 = 1; c3 <= n; c3 += 1) # a[c0][c3] = a[c0][c3+1];
Editor is loading...
Leave a Comment