Đặc tả phân số, inv_Phanso, đặc tả hàm tính tổng của một mảng các phân số
phanso = compose of phanso of
tuso: z mauso: z end mk_phanso: ZxZ -> phanso inv_phanso: phanso -> B inv_phanso(d) ≜ d.mauso != 0 RutGonPhanSo: phanso RutGonPhanSo(d) ≜ Ext wr ps: phanso Let ts = ps.tuso, ms = ps.mauso in let u=uscln(ts,ms) in let tsmoi = ts/u, msmoi = ms/u in ps = 𝜇(𝑝𝑠, 𝑡𝑢𝑠𝑜 ↦ 𝑡𝑠𝑚𝑜𝑖, 𝑚𝑎𝑢𝑠𝑜 ↦ 𝑚𝑠𝑚𝑜𝑖) Tong2ps: phanso x phanso -> phanso Tong2ps (a,b) ≜ Let ts = a.tuso * b.mauso + b.tuso * a.mauso, ms = a.mauso * b.mauso in ps = RutGonPhanSo(mk- phanso(ts,ms)) Tổng_phanso: seq X -> phanso Tổng_phanso: (X) ≜ If len ps = 0 then 0 Else If len ps = 1 then Ps Else Tong2ps(hd ps, Tong_phanso(tail ps))
58. Đặc tả điểm, đường thẳng trong không gian hai chiều
diem= compose of diem of
x: R y: R end mk_diem: RxR -> diem duongthang = compose of duongthang of A: R B: R PTDT: y=Ax+B End mk_duongthang: R, R -> duongthang ThuocDuongThang(A: Diem) r:B Ext Rd d: duongthang Pre true Post r = (d.A*A.x + d.B ) = A.y 59. Đặc tả điểm, tam giac trong không gian hai chiều
diem= compose of diem of
x: R y: R end mk_diem: RxR -> diem diemTrung: Diem x Diem -> B diemTrung(A,B) ≜ A.x != B.x ∧ A.y != B.y tamgiac= compose of tamgiac of A: R B: R PTDT: y=Ax+B End mk_ tamgiac: R, R -> tamgiac Inv_tamgiac: Diem x Diem x Diem Inv_tamgiac(a,b,c) ≜ diemTrung(a,b) ∧ diemTrung(a,c) ∧ diemTrung(b,c) Thanghang: Diem x Diem x Diem -> B Thanghang (a,b,c) ≜ (a.x – b.x)*(b.y – c.y) == (a.x – c.x)*(c.y – b.y)
60. Đặc tả stack chứa các số tự nhiên
stack= compose of stack of
max: N A: N-set End mk_stack: A,N -> stack push: Stack x N -> B push(s, n) ≜ if len s = N then false else s.A = 𝜇(𝑠, , 𝑠. 𝐴 ⟼ 𝑠. 𝐴 ↷ 𝑛 ) pop: Stack x N pop(s, n) ≜ if len len s.A = 0 then false else s.A = 𝜇(𝑠, 𝑠. 𝐴 ⟼ 𝑠. 𝐴(1, 𝑙𝑒𝑛 𝑠. 𝐴 − 1)) true top: -> B top( ) ≜ ext rd s: Stack if len len s.A = 0 then -1 else s.A(len s.A)