#!/usr/bin/perl
require 5.008;
our $VERSION = "0.01"; # Time-stamp: <2017-02-10T17:37:20Z>

use strict;
use warnings;
use utf8;

our $TRIALS = 10000;		# 試行数

use Getopt::Long;
use Pod::Usage;
$ENV{"PERLDOC"} = "" if ! exists $ENV{"PERLDOC"};
$ENV{"PERLDOC"} .= " " if $ENV{"PERLDOC"} ne "";
$ENV{"PERLDOC"} .= "-wcenter:'Probability Model'";

Getopt::Long::Configure("bundling", "auto_version");
GetOptions(
	   "trial=i" => \$TRIALS,

	   "man" => sub {pod2usage(-verbose => 2)},
	   "h|?" => sub {pod2usage(-verbose => 0, -output=>\*STDOUT, 
				   -exitval => 1)},
	   "help" => sub {pod2usage(1)},
	   ) or pod2usage(-verbose => 0);

MAIN:
{
  my $Mon_A = 0;
  my $Trial2 = 0;
  my $Trial3 = 0;

  for (my $i = 0; $i < $TRIALS; $i++) {
    my $A_or_B = (rand(1) < 0.5)? "A" : "B";
    my $Mon_or_Tue = (rand(1) < 0.5)? "Mon" : "Tue";

    if ($A_or_B eq "A") {
      $Trial2++;
      $Trial3++;
      $Mon_A++;
    } elsif ($A_or_B eq "B" && $Mon_or_Tue eq "Mon") {
      $Trial2++;
      $Trial3++;
    } elsif ($A_or_B eq "B" && $Mon_or_Tue eq "Tue") {
      $Trial2++;
    }
  }
  printf("result 2 = %g\n", $Mon_A / $Trial2);
  printf("result 3 = %g\n", $Mon_A / $Trial3);
}

__END__

=pod

=encoding utf8

=head1	NAME

sleeping_beauty_h.pl - 眠り姫問題の 1/2 派の数え方

=head1	SYNOPSIS

perl B<sleeping_beauty_h.pl> --trial=TRIALS

=head1	Options

=over 8

=item B<--help>

show help message about options.

=item B<--man>

show man page.

=item B<--version>

show version infomation.

=item B<--trial>

試行数。

=back

=head1	DESCRIPTION

「眠り姫問題」とは三浦俊彦『多宇宙と輪廻転生』によれば、次のような問題である(引用する)。

日曜日に、ある実験が始められる。まず、あなたは眠らされる。そのあとフェアなコインが投げられ、表か裏かによって、次の二つの措置が選ばれる。

場合A. 表が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。

場合B. 裏が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、火曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。眠りは記憶を消すほど深いので、目覚めたとき月曜か火曜かはわからない。

いずれの場合もあなたは、実験の手続きについてはすべてわかっているものとする。目覚めたときに自分が月曜にいるか火曜にいるか、そしてコインは表だったのか裏だったのかがわからないだけである。

ちなみにコイン投げがなされるタイミングについては融通が利く。コイン投げは、あなたが最初に起こされる前でも、月曜にあなたが目覚めた後でも、問題の論理構造は変化しない。

さて、あなたへのインタビューは次のようなものである。

問1. 「いまは日曜日、実験開始直前である。場合 A である確率は？」
問2. 「さあ、あなたは目覚めた。場合 A である確率は？」
問3. 「さあ、あなたは目覚めた。今は月曜日である。場合 A である確率は？」

引用ここまで。

問2と問3が「眠り姫問題」であるという。この答えには、二つの流派がある。問2 の答えに 1/2 と答える派と、1/3 と答える派である。

問2に 1/2 と答える派はたいてい、問3に 2/3 と答える。問2 に 1/3 と答える派はたいてい 問3 に 1/2 と答える。

ここでは 1/2 派の解答における数え方と思われるものをプログラムしている。なお、三浦(など)は多数回実験が繰り返される場合は、1/3 派になるようなことを述べるが、上のプログラムのように多数回でも 1/2 派の数え方は可能である。

1/2 派の考え方のキモは、場合 B において 問2 や 問3 が問われるとき、月曜と火曜のどちらか一方でしか尋ねられず、おそらく等確率で月曜か火曜に問われることが決まると考えるところだろう。問3 については、火曜に問われると決まったときは、「今は月曜日である」のところを「今は火曜日である」と変えたものが問われると考えるとなる。

=head1	AUTHOR

JRF

=head1	LICENSE

Public Domain.

=cut
