Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
217 views
in Technique[技术] by (71.8m points)

How to use Logical AND operation between two sets in agda?

I wanted to proof that if there is m which is less than 10 and there is n which is less than 15 then there exist z which is less than 25.

thm : ((? λ m → (m < 10)) AND (? λ n → (n < 15))) -> (? λ z → (z < 25))  
thm = ?

How to define AND here?? Please help me. And how to proof this??

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The theorem you're trying to prove seems a little strange. In particular, ? λ z → z < 25 holds without any assumptions!

Let's do the imports first.

open import Data.Nat.Base
open import Data.Product

One simple proof of a generalisation of your theorem (without the assumptions) works as follows:

lem : ? λ z → z < 25
lem = zero , s≤s z≤n

In the standard library, m < n is defined as suc m ≤ n. The lemma is thus equivalent to ? λ z → suc z ≤ suc 24. For z = zero this holds by s≤s z≤n.

Here are a few different ways of expressing your original theorem (the actual proof is always the same):

thm : (? λ m → m < 10) × (? λ n → n < 15) → ? λ z → z < 25
thm _ = lem

thm′ : (?? λ m n → m < 10 × n < 15) → ? λ z → z < 25
thm′ _ = lem

thm″ : (? λ m → m < 10) → (? λ n → n < 15) → ? λ z → z < 25
thm″ _ _ = lem

I would prefer the last version in most circumstances.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...