私はScalaプログラミングコースを受講しています。ある時点で、インストラクターは次のように述べました。
関数blahおよびbladdyは、一階述語論理の普遍的かつ存在記号です。
誰かが "一階述語論理の普遍的および存在記号"を英語に翻訳してくれませんか?
その文は専門用語でいっぱいです。 universal
およびexistential
論理数量詞の説明を見つけることができます ここ 。
Universal Quantifier
は、セットのすべての要素に適用される論理ステートメントです。Existential Quantifier
は、セットの少なくとも1つの要素に適用される論理ステートメントです。first-order
ロジックの簡単な説明については、 ここ も参照してください。この用語は、first-order
をhigher-order
ロジックから分離することを意味します。
First-order
論理ステートメントは通常のものです。彼らはセットのメンバーに作用します。Higher-order
論理ステートメントは他の論理ステートメントに作用します。それらをメタロジックと考えてください。教科書 Language Proof and Logic は、オーダスキー教授が言及した普遍的および存在記号のこれらの英語表現を提供します。
全称記号∀
は普遍的な主張を表現するために使用されます。英語で表現するものは、everything、eachthing、すべてのもの、および何か。
存在記号∃
実存的主張を表現するために使用されます。英語で表現するものは、何か、少なくとも1つのもの、a、およびan。
これらの用語の言及は、おそらく関連しているか、高階関数を使用したコレクションの操作につながりました。 Scalaでは、コレクションに対するforall
およびexists
操作を使用すると、ロジックからコードへの移行は非常に自然です。これらは、上記の普遍的かつ実存的な定義に類似しています。これを示すには、いくつかの簡単な例が役立ちます。
scala> val l = 1 to 10
l: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> l.forall(x => x > 0)
res0: Boolean = true
scala> l.forall(x => x > 1)
res1: Boolean = false
これらの2つのforall
ステートメントは、このコレクションのdoall要素が基準を満たすように要求しているだけです。
scala> l.exists(x => x < 1)
res2: Boolean = false
scala> l.exists(x => x < 2)
res3: Boolean = true
これらの2つのexists
ステートメントは、このコレクションのdoany要素が基準を満たすように要求しているだけです。
その声明を完全に理解するには、おそらくいくつかの論理を研究する必要があります。しかし、ここに基本的な要点があります:
「数量詞」は、論理ステートメントで変数に意味を与える方法です。 「{x
についての何か}」と言えば、それだけではあまり意味がありません。 x
が、それが真であるか偽であるかを示すために何であるかを知る必要があります。しかし、私がquantify変数x
に対して、「すべてのx
{x
についての何か}」または「{x
についての何か}」のようなx
が存在する場合、私は単一のステートメントを作成しています。 trueまたはfalseのいずれか。
「forallx
」の場合、「{something about x
}」はanyx
に当てはまります。それは全称記号です。たとえば、「すべてのx
について、x
は偶数です」は誤ったステートメントです。
「そのようなx
が存在する」場合、「{x
についての何か}」が真になるようにx
の可能な選択肢があると言っています(私はその選択が何であるかを言っているのではなく、1つあるだけです)。これは存在記号です。例として、「x
が偶数であるようなx
が存在する」というのは本当のステートメントです。
「すべてのx
{x
についての何か}」は「x
が存在することは真実ではないので{x
についての何か}」は真実ではない」と同じことを意味し、「 {x
}についての何かが「すべてのx
について、{x
についての何か}が真実ではないことは真実ではない」と同じことを意味するようなx
。あなたがそれについて考えるならば、うまくいけば、それは直感的に正当化されるようです。
関数blah
とbladdy
が何であるかを教えていただければ、それらが普遍的および存在記号に対応する方法を説明できます。これは、インストラクターのポイントを理解するのに役立つ可能性があります。