Skip to content

Latest commit

 

History

History
131 lines (90 loc) · 2.41 KB

Lecture1.md

File metadata and controls

131 lines (90 loc) · 2.41 KB

%title: Metody Formalne, wykład 1 %author: Tomasz Brengos %date: 2024-02-26

-> # Instalacja Agda i IDE <-

  • Emacs (doom)
  • Agda mode
  • Agda std-lib (1.7.3)

-> # Pierwszy moduł <-

module lecture1 where

import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl; cong; sym)
open Eq.≡-Reasoning using (begin_; _≡⟨⟩_; step-≡; _∎)

-> # Typ reprezentujący liczby naturalne <-

Definicja typu reprezentującego liczby naturalne:

data  : Set where
  zero :suc  :{-# BUILTIN NATURAL ℕ #-}

Definicja dodawania

_+_ : ℕ
...

-> # Pierwsze twierdzenie <-

_ : 2 + 2 ≡ 4

-> # Automatyzacja twierdzeń <-

_ : 5 + 2 ≡ 7

-> # Typy zależne i dowody <-

Rozważmy następującą deklarację typu funkcji:

+_zero-neutral : ∀ (m : ℕ ) → m + zero ≡ m

-> # Dalsze kroki <-

_*_ :*-right-zero :  ( m : ℕ )  m * zero ≡ zero
+-assoc :  (m n p : ℕ)  ( m + n ) + p ≡ m + ( n + p )
+-identity_r :  (m : ℕ)  m + zero ≡ m
+-suc :  (m n : ℕ)  m + (suc n) ≡ suc (m + n)
+-commutativity :  ( m n : ℕ )  m + n ≡ n + m

Mozemy uzywać słowa klucza rewrite:

+-assoc2 :  ( m n p : ℕ )  (m + n) + p ≡ m + (n + p)
+-assoc2 zero n p = refl
+-assoc2 (suc m) n p rewrite +-assoc m n p = refl

-> # Ćwiczenie 1 <-

  • Zdefiniować typ reprezentujący listę
  • Zdefiniować operację konkatenacji dwóch list
  • Udowodnić własności konkatenacji (np. równości monoidowe)

-> # Ćwiczenie 2 <-

Rozważmy następującą definicję postaci binarnej liczb naturalnych:

data Bin : Set where
  ⟨⟩ : Bin
  _O : Bin  Bin
  _I : Bin  Bin

Zdefiniować inc: Bin → Bin oraz dla przedstawionych

to   : Bin
from : Bin 

udowodnić zgodność obu definicji.