Редактирование: МФСП, 02 семинар (от 08 сентября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | Цель этих | + | Цель этих 4--5 занятий будет рассказать онвы RSL. |
- | + | Пркт. задание: Небх. будет по здаче написать явную-неявную пецификацию, тетовое покрытие, тетовый драйвер и реализацию на С++, удовлетвряю.щую пец. | |
Типы данных в RSL: | Типы данных в RSL: | ||
Строка 7: | Строка 7: | ||
* Int +, −, ×, /, \, ↑, abs, real | * Int +, −, ×, /, \, ↑, abs, real | ||
* Nat {|I=Int, i > 0|} | * Nat {|I=Int, i > 0|} | ||
- | * Real. | + | * Real. Вегда должны приут. точка и одна цифра после точки. +, −, ×, /, abs, int (сиречь trunc) |
* Char 'A'...'Z' | * Char 'A'...'Z' | ||
* Text — посл. символов | * Text — посл. символов | ||
- | * Unit. | + | * Unit. Единст. Значение, исп. для функц. без параметров |
== Логика в RSL == | == Логика в RSL == | ||
- | Трёхзначная, | + | Трёхзначная, пмимо true/false есть ещё chaos (ошибка, нетипизированное). |
- | Все таблицы ит. | + | Все таблицы ит. троятся из тог, что в RSL ленивые выч. лог. выр, крме того ~chaos = chaos. |
(по гор. второй операнд, по верт. — первый) | (по гор. второй операнд, по верт. — первый) | ||
Строка 132: | Строка 132: | ||
</td></tr></table> | </td></tr></table> | ||
- | Для описания альтернатив | + | Для описания альтернатив исп. if-then-else: |
'''if''' expr1 '''then''' expr2 '''else''' expr3 '''end''' | '''if''' expr1 '''then''' expr2 '''else''' expr3 '''end''' | ||
Строка 146: | Строка 146: | ||
'''if''' a '''then''' expr2 '''else''' expr3 '''end''' = expr2 = '''if''' a '''then''' expr2 [<math>\frac{true}{a}</math>]'''else''' expr3[false/a] '''end''' = expr2 | '''if''' a '''then''' expr2 '''else''' expr3 '''end''' = expr2 = '''if''' a '''then''' expr2 [<math>\frac{true}{a}</math>]'''else''' expr3[false/a] '''end''' = expr2 | ||
- | В RSL, как и в | + | В RSL, как и в бычном матлоге, исп. кванторы ∃, ∀, !∃. |
- | Задачи. Будут | + | Задачи. Будут выпис. тождества обычной логики, нужно прверить, работает ли оно в RSL: |
- | ~~a ≡ a — | + | ~~a ≡ a — выполняетя |
true or a ≡ true — выполняется | true or a ≡ true — выполняется | ||
Строка 213: | Строка 213: | ||
∀ i: Int • ∃ j: Int • i+j=0 — истина (при j = -i) | ∀ i: Int • ∃ j: Int • i+j=0 — истина (при j = -i) | ||
- | ∀ i: Int • ∃ j: Nat • i+j=0 — не удовл (нельзя найти j для | + | ∀ i: Int • ∃ j: Nat • i+j=0 — не удовл (нельзя найти j для полож. i) |
∃ i: Int • ∀ j: Int • i+j=0 — не верно | ∃ i: Int • ∀ j: Int • i+j=0 — не верно | ||
- | Написать на RSL выражение, | + | Написать на RSL выражение, выраж. тот факт, чт нет наиб. целого числа: |
~(∃ i: Int • ∀ j: Int; • (i >= j ≡ true)) | ~(∃ i: Int • ∀ j: Int; • (i >= j ≡ true)) | ||
Строка 225: | Строка 225: | ||
== Описание функций в RSL == | == Описание функций в RSL == | ||
- | Прежде чем узнать описание функций, | + | Прежде чем узнать описание функций, узаем, что такое декартово произведение типов: |
Type1 × Type2 × ... × Typen | Type1 × Type2 × ... × Typen | ||
Строка 231: | Строка 231: | ||
(5, "ABC", true): Intx × Text × Bool | (5, "ABC", true): Intx × Text × Bool | ||
- | Для декартовых | + | Для декартовых произв. опр. тлько равентв и нер. |
- | + | Контанты в RSL — частный случай функций (функ. без арг.). Функции могут задаваться: | |
- | * Явно. | + | * Явно. опис., как вычисл, или знач. |
- | * Неявно. | + | * Неявно. Накл. условия на знач. |
- | * Аксиоматически. Опис., | + | * Аксиоматически. Опис., ... |
Константы: | Константы: | ||
Строка 243: | Строка 243: | ||
Явное задание: | Явное задание: | ||
- | name: Type = val #задание | + | name: Type = val #задание знач. |
Пример: x : Int = 5 | Пример: x : Int = 5 | ||
Строка 251: | Строка 251: | ||
x : Int • x > 0 | x : Int • x > 0 | ||
- | Аксиоматически: | + | Аксиоматически: мжно исп. оба варианта |
В разделе опис. констант: x: Int | В разделе опис. констант: x: Int | ||
- | В | + | В раздее опис. аксиом: |
'''Axiom''' | '''Axiom''' | ||
x ≡ 1 или например | x ≡ 1 или например | ||
Строка 259: | Строка 259: | ||
Функции в RSL: | Функции в RSL: | ||
- | * Всюду | + | * Всюду выч. Для любого x из бл. пр. сущ. единст. y, таке что f(x) = y^ |
∀ x: T1 • !∃ y : T2 • f(x)=y | ∀ x: T1 • !∃ y : T2 • f(x)=y | ||
- | * Частично | + | * Частично выч. Для нек-рах зн. x могут иметь 0б 2 или блее знач |
'''value''' | '''value''' | ||
name : Type → result_Type | name : Type → result_Type | ||
- | для | + | для чатично вычислимых — трелочка с тильдой. В случае сложных типов ип. дек. произв. |
Явная спецификация: | Явная спецификация: | ||
Строка 280: | Строка 280: | ||
'''value''' | '''value''' | ||
f : Int → Int; | f : Int → Int; | ||
- | f(x) as r | + | f(x) as r #опр. новой перем, связ. с зн. ф-ции |
- | post r>x | + | post r>x #постусловие, связ. арг. и зн. функции |
- | Пример | + | Пример пис. кв. корня: |
sqrt : Real трелочка с тильдой Real | sqrt : Real трелочка с тильдой Real | ||
sqrt(x) as s | sqrt(x) as s | ||
Строка 295: | Строка 295: | ||
∀x"Int • f(x) ≡ x | ∀x"Int • f(x) ≡ x | ||
- | Пример с sqrt: для | + | Пример с sqrt: для част. выч. ф-ции предусловие переносится в нач. импл. |
'''value''' | '''value''' | ||
sqrt : Real трелочка с тильдой Real | sqrt : Real трелочка с тильдой Real | ||
Строка 319: | Строка 319: | ||
cmplx_mul((xr, xi), (yr, yi)) ≡ (xr×yr-xi×yi, xi×yr+xr×yi) | cmplx_mul((xr, xi), (yr, yi)) ≡ (xr×yr-xi×yi, xi×yr+xr×yi) | ||
- | Функция, | + | Функция, возвр. некое компл. число, отл. от заданного |
'''value''' | '''value''' | ||
cmplx_another : complex → complex | cmplx_another : complex → complex |