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

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";

    if ($A_or_B eq "A") {
      $Trial2++;
      $Trial3++;
      $Mon_A++;
    } elsif ($A_or_B eq "B") {
      # Mon
      $Trial2++;
      $Trial3++;

      # 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_t.pl - 眠り姫問題の 1/3 派の数え方

=head1	SYNOPSIS

perl B<sleeping_beauty_t.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/3 派の解答における数え方と思われるものをプログラムしている。

1/3 派の考え方のキモは、試行数の数え方をコインを投げた回数ではなく、目覚めた回数で数えることだろう。1/2 派と違って「月曜か火曜に」ではなく「月曜も火曜も」同様のインタビューを受けると考えるとする。

=head1	AUTHOR

JRF

=head1	LICENSE

Public Domain.

=cut
