Logic 用等式关系证明定理:∀;[x]∀;[y](¬;Eq x y→;¬;Eq(f x)(f y))

Logic 用等式关系证明定理:∀;[x]∀;[y](¬;Eq x y→;¬;Eq(f x)(f y)),logic,relation,agda,Logic,Relation,Agda,我试图使用Agda解决以下一阶逻辑问题: problem : {A B : Set} {f : A → B} → inj f → ∀[ x ] ∀[ y ] (¬ Eq x y → ¬ Eq (f x) (f y)) 使用以下平等关系定义和一些支持定义: data ⊥ : Set where ⊥-elim : {A : Set} → ⊥ → A ⊥-elim () infix 3 ¬_ ¬_ : Set → Set ¬ A = A → ⊥ Π : (A : Set) → (B :

我试图使用Agda解决以下一阶逻辑问题:

  problem : {A B : Set} {f : A → B} → inj f → ∀[ x ] ∀[ y ] (¬ Eq x y → ¬ Eq (f x) (f y))
使用以下平等关系定义和一些支持定义:

data ⊥ : Set where

⊥-elim : {A : Set} → ⊥ → A
⊥-elim ()

infix 3 ¬_ 
¬_ : Set → Set
¬ A = A → ⊥

Π : (A : Set) → (B : A → Set) → Set
Π A B = (a : A) → B a

forAll : {A : Set} → (B : A → Set) → Set
forAll {A} B = Π A B

∀-syntax = forAll
infix 0 ∀-syntax
syntax ∀-syntax (λ a → B) = ∀[ a ] B

apply : {A : Set} → {B : A → Set} → Π A B → (a : A) → B a
apply f x = f x

data Σ (A : Set) (B : A → Set) : Set where
    ⟨_,_⟩ : (a : A) → B a → Σ A B

thereExists : ∀ {A : Set} (B : A → Set) → Set
thereExists {A} B = Σ A B

∃-syntax = thereExists
infix 0 ∃-syntax
syntax ∃-syntax (λ x → B) = ∃[ x ] B

∃-elim : {A : Set} {B : A → Set} {C : Set} → (∀ (a : A) → B a → C) → Σ A B → C
∃-elim a→b→c ⟨ a , b ⟩ = a→b→c a b

dfst : {A : Set} {B : A → Set} → Σ A B → A
dfst ⟨ a , _ ⟩ = a

dsnd : {A : Set} {B : A → Set} → (p : Σ A B) → B (dfst p)
dsnd ⟨ _ , b ⟩ = b

module IFOL 
    (Eq : {A : Set} → A → A → Set) 
    (subst : {A B : Set} → (f : A → B) → ∀[ a1 ] ∀[ a2 ] (Eq a1 a2 → Eq (f a1) (f a2))) 
    (trans : {A : Set} → (a1 a2 a3 : A) → Eq a1 a2 → Eq a2 a3 → Eq a1 a3) 
  where

  inj : {A B : Set} → (A → B) → Set
  inj {A} {B} f = ∀[ a1 ] ∀[ a2 ] (Eq (f a1) (f a2) → Eq a1 a2)

  surj : {A B : Set} → (A → B) → Set
  surj {A} {B} f = ∀[ b ] ∃[ a ] Eq (f a) b

  infix 20 _∘_
  _∘_ : {A B C : Set} → (A → B) → (B → C) → A → C
  (f ∘ g) a = g (f a)
我的解决方法如下:

problem : {A B : Set} {f : A → B} → inj f → ∀[ x ] ∀[ y ] (¬ Eq x y → ¬ Eq (f x) (f y))
problem injf x y noteqxy eqfxfy = noteqxy ?
然而,我被困在那里,无法进一步找到一个解决方案,让我实现目标
Eq x y
。我曾尝试以多种方式使用
injf
函数,但主要问题似乎是我不知道如何返回函数类型


由于这是我正在做的一项学生作业,我不是在要求解决方案,只是要求指导我如何使用该解决方案(这是正确的方向吗?我应该在我的解决方案中使用
subst
还是
trans
)。

不给你解决方案很难帮助你,因为它很短,但我会努力的

提示1:您不需要
subst
trans

提示2:解决方案只是上下文中元素的简单组合

提示3:如果你想返回一个函数,比如你的句子

但主要的问题似乎是我不知道如何返回函数类型

建议您删除参数
eqfxfy
,并使用
_∘_不是您定义的代码。您可以在标准库文件
Function.agda
中找到这样的定义,但我想您不打算使用来自std库的任何导入。但是,我不明白为什么要这样做,因为将函数从a返回到B与通过添加类型为a的参数返回B的元素是一样的,这就是您要做的,因为您添加了参数
eqfxfy


提示4:要求Agsy使用CTRL-C CTRL-A为您构建术语为您提供了解决方案,您可以在以后尝试理解这些解决方案。看看它们是如何工作的可能是有用的——它们是函数。然后就有了这些函数所需的所有输入。