استقرای ساختاری

استقرای ساختاری روشی است که برای اثبات کردن قضایا از آن استفاده می‌شود که در منطق ریاضی (به عنوان مثال، در اثبات قضیه لس)، علوم کامپیوتر، نظریه گراف، و برخی دیگر از زمینه‌های ریاضی کاربرد دارد. این استقرا یک تعمیم از استقراء ریاضی روی اعداد طبیعی است، و می‌تواند به‌طور قراردادی به استقرای Noetherian تعمیم داده شود.
روش بازگشت ساختاری یک روش بازگشتی است که ارتباط آن با استقرای ساختاری همانند ارتباط یک رابطه بازگشتی ساده با یک رابطه استقرای ریاضی ساده است.
استقرای ساختاری برای اثبات برخی گزاره‌های (P(x، که به ازای همه x‌های نوعی از ساختارهای تعریف شده به صورت بازگشتی مانند لیست‌ها یا درختان صحیح است، استفاده می‌شود. یک ترتیب جزئی کامل بر ساختارها ("زیرلیست" برای لیست‌ها و "زیر درخت" برای درختان) تعریف شده‌است.
روش اثباتی استقرای ساختاری ثابت می‌کند که گزاره برای تمام ساختارهای مینیمال صحیح است، و در صورتی که این روش برای زیرساخت‌های بلافاصله یک ساختار خاص مانند S برقرار باشد آنگاه می‌بایست برای خود S نیز برقرار باشد.
(به زبان رسمی، این مسئله موجب صحت فروض اصل استقرای کامل است که ادعا می‌کند که این دو شرط برای گزاره‌ای با هر مقدار x کافی است.)
یک تابع بازگشتی ساختاری ازهمان ایده که برای تعریف یک تابع بازگشتی به کار برده می‌شود، استفاده میکند: حالات پایه که هر یک از ساختارهای مینیمال را رسیدگی می‌کنند و یک قانون برای بازگشت. رابطه بازگشتی ساختاری معمولا بوسیله استقرای ساختاری ثابت می‌شود؛ در موارد خاص آسان ،معمولا از گام استقرا صرف نظر می‌شود. طول(length) و توابع ++ در مثال زیر روابط ساختاری بازگشتی‌اند.
برای مثال، اگر ساختارها به صورت لیست باشند، لیستی معمولا ترتیب جزئی < را معرفی می‌کند که در آن L <M است، هر زمان که لیست L دم لیست M باشد. بر اساس این ترتیب، لیست خالی عنصر خاص مینمال است.
اثبات استقرای ساختاری برخی از گزاره‌های (P(l شامل دو بخش است: اثبات این که ()P درست است، و اثبات این که اگر (P(L برای برخی از لیست‌های L درست باشد، و اگر L دم لیست M باشد، پس (P(M نیز باید درست باشد.
در نهایت، ممکن است بیش از یک حالت پایه و/ یا بیش از یک حالت استقرا، بسته به اینکه چگونه تابع یا ساختار ساخته شده است، وجود داشته باشد. در آن موارد، اثبات استقرای ساختاری برخی از گزاره‌های (P(L شامل: الف) اثبات این که (P(BC، برای هر حالت پایه BC درست است. و ب) اثبات این که اگر (P(l برای برخی از موارد l درست باشد، وM بتواند از l با یک بار امتحان کردن هر یک از قواعد بازگشتی به دست بیاید، پس (P(M نیز باید درست باشد، می‌شود.
مثال‌ها
شجره نامه باستان، نشان دادن 31 نفر در 5 نسل
شجره نامه یک ساختار داده شناخته شده‌است که پدر و مادر، پدربزرگ و مادربزرگ، و اجداد یک فرد را تا آنجا که شناخته شده باشند نشان می‌دهد و به صورت بازگشتی تعریف می‌شود:
در ساده‌ترین حالت، یک شجره نامه فقط یک نفر را نشان می‌دهد (اگر چیزی در مورد پدر و مادر آن شخص مشخص نباشد).
متناوبا، شجره نامه یک نفر را، که توسط شاخه به دو زیر درخت پدر و مادر خود متصل شده است، نشان می‌دهد(با استفاده از فرضی ساده که اگر :یکی از آن‌ها شناخته شده باشد، پس هر دو شناخته شده‌اند).
به عنوان مثال، ویژگی " یک شجره نامه که بیش از g نسل را گسترش می‌دهد حداکثر 2g-1 نفر را نشان می‌دهد" را می‌توان با استقرای ساختاری ثابت کرد که به شرح زیر است:
در ساده‌ترین حالت، درخت فقط یک نفر را و از این رو یک نسل را نشان می‌دهد. تا زمانی که 1 ≤ 21 - 1 ویژگی مذکور برای چنین درختی درست است.
متناوبا، درخت، درختان یک نفر و والدینش را نشان می‌دهد. از آن جا که هر یک از والدین یک زیرساختار از ساختار درخت هستند، می‌توان صحیح بودن ویژگی مذکور را اثبات شده فرض نمود. که با عنوان فرضیه استقرایی نیز شناخته می‌شود.
پس می‌توان فرض کرد، p ≤ 2g – 1 و q ≤ 2h – 1، که در آن g و h نشان دهنده تعداد نسل‌هایی است که زیردرخت‌های پدر و مادر به ترتیب گسترش می‌دهند، و p و q نشان دهنده تعداد افرادی است که آن‌ها نشان می‌دهند.
در صورتی که g ≤ h، کل درخت، بیش از 1 + hنسل گسترش می‌یابد و p + q + 1 نفر را نشان می‌دهد. و
p + q + 1 ≤ (2g - 1) + (2h - 1) + 1 ≤ 2h + 2h - 1 = 21 + h – 1؛
یعنی کل درخت ویژگی مذکور را برآورده می‌کند.
در صورتی که h ≤ g، کل درخت، بیش از 1 + g نسل گسترش می‌یابد و همینطور p + q + 1 ≤ 21 + g - 1 نفر را با استدلالی مشابه نشان می‌دهد. یعنی کل درخت در این مورد نیز ویژگی مذکور را برآورده می‌سازد.
از این رو، با استقرای ساختاری، هر شجره نامه ویژگی مذکور را برآورده می‌کند.
به عنوان مثالی رسمی‌تر، ویژگی مربوط به لیست‌های زیر را در نظر بگیرید:
length (L ++ M) = length L + length M EQ
در اینجا ++ نشان دهنده عمل الحاق لیست هاست وL و M لیست می‌باشند.
به منظور اثبات این ویژگی، ما تعاریف طول(length) و عمل الحاق(++) را نیاز داریم. قرار دهید (h : t) که لیستی را که سر (عنصر اول) آن h و دم (فهرست عناصر باقی مانده) آن T است نشان می‌دهد، و اجازه دهید نشان دهنده‌ی لیست خالی باشد. تعاریف طول(length) و عمل الحاق(++) عبارتند از:
length = 0 LEN1
length (h:t) = 1 + length t LEN2
list = list APP1 ++
h:t) ++ list = h : (t ++ list) APP2)
گزاره (P(l ما برابراست با EQ برای همه لیست‌های M درست است اگر L برابر l باشد. می‌خواهیم نشان می‌دهیم که (P(l برای همه لیست‌های l درست است. ما این کار را با استقرای ساختاری بر لیست‌ها ثابت خواهیم کرد.
ابتدا ثابت می‌کنیم که ()P درست است. که در واقع برابر است با، EQ درست است برای همه لیستهای M زمانی که L برابر لیست خالی است. EQ را به صورت زیردر نظر بگیرید:
(length (L ++ M) = length ( ++ M
(length M (by APP1 =
0 + length M =
(length + length M (by LEN1 =
length L + length M =
بنابراین این بخش از قضیه ثابت شد. EQ برای همه M‌ها درست است، هنگامی که L برابر است، چرا که سمت چپ و سمت راست برابرند.
سپس، هر لیست مخالف تهی I را در نظر بگیرید. از آنجا که l مخالف تهی است، پس یک سر، x ، و یک لیست دم، xs ، دارد. بنابراین ما می‌توانیم آن را به عنوان (x: xs) بیان کنیم. فرض استقرا این است که EQ برای تمام مقادیر M زمانی است که L برابر xs است درست باشد:
(length (xs ++ M) = length xs + length M (hypothesis
میخواهیم نشان دهیم که در صورت برقراری این شرایط EQ برای تمام مقادیر M هنگامی که (L = I = (x: xs درست است.همانند قبل ادامه می‌دهیم:
length L + length M = length (x:xs) + length M
1 + length xs + length M =
1 + (length (xs ++ M =
(length (x: (xs ++ M =
(length ((x:xs) ++ M =
(length (L ++ M =
بنابراین، ما بوسیله‌ی استقرای ساختاری، به دست آوردیم که (P(L برای همه لیست‌های L درست است .
خوش ترتیبی
همانگونه که استقرای ریاضی استاندارد معادل "اصل خوش ترتیبی" است، استقرای ساختاری نیز معادل یک "اصل خوش ترتیبی" است. اگر مجموعه‌ی تمام ساختارهای نوعی خاص یک ترتیب جزئی کامل را بپذیرد ، پس هر زیر مجموعه ناتهی باید دارای یک عنصر مینیمال باشد.(این تعریف کامل است.) اهمیت این لم در این زمینه، آن است که به ما اجازه می‌دهد تا استنباط کنیم که اگر هر گونه مثال نقضی برای قضیه‌ای که می‌خواهیم اثباتش کنیم وجود داشته باشد، پس باید یک مثال نقض مینیمم وجود داشته باشد. اگر ما بتوانیم نشان دهیم که وجود مثال نقض مینیمم دلالت می‌کند بر وجود مثال نقض‌های حتی کوچکتر، ما یک تناقض (هنگامی که مثال نقض مینیمم، کوچکترین نیست) داریم و در نتیجه مجموعه مثالهای نقض باید خالی باشد.
به عنوان مثالی از این نوع استدلال، مجموعه‌ای از تمام درختان دودویی را در نظربگیرید. ما نشان خواهیم داد که تعداد برگ‌ها در یک درخت دودویی کامل یکی بیشتر از تعداد گره‌های داخلی آن است. فرض کنید یک مثال نقض وجود داشته باشد؛ پس باید یک درخت کامل با حداقل تعداد گره‌های داخلی ممکن وجود داشته باشد. این مثال نقض، C، دارای n گره داخلی وl برگ است، که در آن l ≠ n + 1 . علاوه بر این، C باید غیر بدیهی باشد، چرا که درخت بدیهی دارای n = 0 و L = 1 است و بنابراین، این یک مثال نقض نیست. در نتیجه C حداقل یک برگ که پدر آن یک گره داخلی است، دارد. حذف این برگ و پدر آن از درخت، گره برادر برگ را به موقعیت ای که قبلا توسط پدر گره اشغال شده بود انتقال می‌دهد. این هر دوی n و l را یک واحد کاهش می‌دهد ، پس درخت جدید نیز دارای n + 1 ≠ l و بنابراین دارای یک مثال نقض کوچکتر است. اما بنابر فرض، C در حال حاضر کوچکترین مثال نقض بود. لذا این فرض که هرگونه مثال نقضی برای شروع وجود دارد می‌بایست فرض نادرستی باشد. "ترتیب جزئی که توسط کوچکتر در اینجا گفته شد بیان می‌کند که S <T هر گاه S دارای گره‌های کمتر از T باشد.
Coinduction
Initial algebra