Tanım olarak düşündüğünüz özelliklere bağlı olarak, matematiksel bir yapıyı tanımlamanın birden çok yolu vardır. Eşdeğer karakterizasyonlar arasında hangisini tanım, hangisini alternatif karakterizasyon olarak almak önemli değildir.
Yapıcı matematikte, yapıcı akıl yürütmeyi kolaylaştıran bir tanım seçmek tercih edilir. Doğal sayılar için, akıl yürütmenin temel biçimi, geleneksel sıfır veya ardıl tanımını çok uygun kılan tümevarımdır. Diğer sayı kümelerinin böyle bir tercihi yoktur.
Bölümler üzerinde muhakeme yaparken, yapıcı olmayan ortamlarda, “denklik sınıfının bir üyesini seçin” demek yaygındır. Yapıcı bir ortamda, bir üyenin nasıl seçileceğini açıklamak gerekir. Bu, denklik sınıfları oluşturmaktan ziyade, türün her bir üyesi için bir nesne oluşturan tanımlarla gitmeyi kolaylaştırır.
Örneğin, tanımlamak için , bir matematikçi doğal sayı farklılıklarını eşitlemekten memnun olabilir:
Bu konuda düzenli bir his olsa da (“şu ya da bu” yok), yapıcı akıl yürütme için, nesnelerin eşitliğinin temsil eşitliğine denk gelmesi daha basittir , bu nedenle, göreceli tamsayıları doğal bir sayı veya doğal bir sayının eksi bir negatif olarak tanımlayabiliriz:Z
Z:=N2/{((x,y),(x′,y′))∣x+y′=x′+y}
Inductive Z1 :=
| Nonnegative : nat -> Z1 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Negative : nat -> Z1. (* ⟦Negative x⟧ = -⟦x⟧-1 *)
Bununla birlikte, bu tanım garip bir şekilde asimetriktir, bu da sıfır için iki farklı temsili kabul etmeyi tercih edebilir:
Inductive Z2 :=
| Nonnegative : nat -> Z2 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Nonpositive : nat -> Z2. (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)
Veya doğalları bir yapı taşı olarak kullanmadan göreceli tamsayıları oluşturabiliriz:
Inductive Pos3 :=
| I : Pos3 (* ⟦I⟧ = 1 *)
| S3 : Pos3 -> Pos3 (* ⟦S3 x⟧ = ⟦x⟧+1 *)
Inductive Z3 :=
| N3 : Pos3 -> Z3 (* ⟦N3 x⟧ = -⟦x⟧ *)
| O3 : Z3 (* ⟦O3⟧ = 0 *)
| P3 : Pos3 -> Z3 (* ⟦P3 x⟧ = ⟦x⟧ *)
Coq standart kütüphane kullanımları Yine bir başka tanımı: kendi gösterimden pozitif tamsayılar oluşturur Daha sonra inşa basamağı, 0 veya 1 değerindeki bir dizisi tarafından takip edilen basamak 1 gibi, temel 2 Z
gibi Z3
den Pos3
yukarıda. Bu tanım aynı zamanda her tamsayı için benzersiz bir temsile sahiptir. İkili gösterimi kullanma seçimi daha kolay bir akıl yürütme değil, programlar provalardan çıkarıldığında daha verimli kod üretmek içindir.
Akıl yürütme kolaylığı bir tanım seçmede güdülenir, ancak asla aşılamaz bir faktör değildir. Bazı yapılar belirli bir kanıtı kolaylaştırırsa, bu tanımı o kanıtta kullanabilir ve yapının başlangıçta tanım olarak seçilen diğer yapıya eşdeğer olduğunu kanıtlayabiliriz.
Rasyonel sayılar için, tamsayıların bir faktörler ürünü olarak gösterilmesinden (bu toplama ve üzerindeki toplam sıralamanın tanımlanması zor olan bazı temel işlemleri yapmadığı sürece) bölümlerden kaçmak zordur. Coq standart kütüphane tanımlar olarak (pay ve payda) ve bir operatörün tanımlayan iki elemanlarının denkliğini test etmek . Bu tanım oldukça yaygındır çünkü bu kadar basit.NQ
N×N∗=?=
Q
Gerçek sayılar, inşa edilemedikleri için tamamen farklı bir balık su ısıtıcısıdır. Gerçek sayıları bir endüktif tip olarak tanımlamak imkansızdır (tüm endüktif tipler sayılabilir). Bunun yerine, gerçek sayıların herhangi bir tanımı aksiyomatik, yani yapıcı olmamalıdır. Gerçek sayıların sayısız alt kümesini oluşturmak mümkündür; bunu yapmanın yolu hangi alt kümeyi oluşturmak istediğinize bağlıdır.