• agda学习笔记证明:关系


    agda 学习笔记---证明:关系

    运算在 agda 里是函数,而关系是数据类型

    import Relation.Binary.PropositionalEquality as Eq
    open Eq using (_≡_; refl; cong)
    open import Data.Nat using (ℕ; zero; suc; _+_)
    open import Data.Nat.Properties using (+-comm; +-identityʳ)
    
    data _≤_ : ℕ → ℕ → Set where
        z≤n : ∀ {n : ℕ}
            → zero ≤ n 
        s≤s : ∀ {n m : ℕ}
            → m ≤ n 
            → suc m ≤ suc n

    这个数据类型有两个构造函数:

    z<=n :  () -> ( zero <= n )

    s<=s : ( m <= n ) -> (suc m < suc n )

    无空格的都是名称

    _ : 2 ≤ 4
    _ = s≤s (s≤s z≤n)

    证明了 suc (suc zero)  <= ssss zero

    0<=2

    ->

    1<=3

    ->

    2<=4 

    反演

    证明方式唯一的时候

    可以反演:

    invs≤s : {n m : ℕ} 
        → suc n ≤ suc m 
        → n ≤ m 
    invs≤s (s≤s n≤m) = n≤m 

    注意:n<=m 是变量 n <= m 是类型

    传递性

    ≤-trans : ∀ {m n p : ℕ}
        → m ≤ n 
        → n ≤ p 
        → m ≤ p 
    
    ≤-trans z≤n n≤p = z≤n
    ≤-trans (s≤s m≤n) (s≤s n≤p) = s≤s (≤-trans m≤n n≤p)

    传递性的证明还是运用了归纳的思想

    自反性

    ≤-antisymmetric : ∀ {n m : ℕ}
        → n ≤ m 
        → m ≤ n 
        → n ≡ m 
    
    ≤-antisymmetric z≤n z≤n = refl 
    ≤-antisymmetric (s≤s x) (s≤s y) = cong suc (≤-antisymmetric x y)
  • 相关阅读:
    Django----抽屉项目 笔记
    Django验证码【附源码】
    C语言--循环控制结构
    javascript 流程控制及函数
    yield和yield from
    python面试题(转)
    断言assert用法
    javascript基本语法
    python经典一百道习题(转自奶酪博客)
    functools模块中的函数
  • 原文地址:https://www.cnblogs.com/liankewei/p/15651881.html
Copyright © 2020-2023  润新知