天泣記

2025-06-28 (Sat)

#1 Proof Summit 2025

発表スライド: Coq ユーザが Lean を調べてみた

2025-05-29 (Thu)

#1 Debian の /etc/network/interfaces

Debian で、昔ながらの (network-manager を使わない) ネットワークの設定は /etc/network/interfaces にいろいろ書くのだが、 その形式は manpage として interfaces(5) に書いてある。

が、OPTIONS PROVIDED BY OTHER PACKAGES のところに記載があるように、ifupdown ではない他のパッケージによって提供されているオプションもあって、そういうのはこのマニュアルには書いていない。

ここで、wpasupplicant が提供しているものを調べようと思って、マニュアルを眺めてみたが見つからず、 (Debian パッケージの) ソースをとってきたら wpasupplicant.README.Debian というファイルがあってそこに書いてあった。

/etc/network/interfaces に wpasupplicant の設定を行うのは Debian 独自のやりかたなのかな。

2025-04-18 (Fri)

#1 RubyKaigi 2025 day 3

2025-04-17 (Thu)

#1 RubyKaigi 2025 day 2

2025-04-16 (Wed)

#1 RubyKaigi 2025 day 1

2025-04-15 (Tue)

#1 RubyKaigi 2025 day 0 (Rubyハッカソン at RubyKaigi 2025, Ruby 開発者会議)

2025-03-20 (Thu)

#1 あみだくじ (2)

証明の場合分けが不必要に多かったので減らしてみた。 (他にもいくらか調整した。)

From mathcomp Require Import all_ssreflect.

Section amida_kuji.

Variable segment : eqType.

Definition path := seq segment.

(* amida-kuji has determinstic function to obtain next segment *)
Variable next : segment -> option segment.

Definition valid_path (seg : segment) (p : path) : bool :=
  all id (pairmap (fun x y => next x == Some y) seg p).

Lemma valid_path_cons (seg0 seg1 : segment) (p : path) :
  valid_path seg0 (seg1 :: p) -> next seg0 = Some seg1 /\ valid_path seg1 p.
Proof.
  by rewrite /valid_path /= => /andP [] => /eqP Hn Hv.
Qed.

Lemma next_nth (dummy seg x y : segment) (p : path) (i : nat):
  valid_path seg p -> i < size p -> next x = Some y ->
  nth dummy (seg :: p) i = x -> nth dummy (seg :: p) i.+1 = y.
Proof.
  move=> Hv Hi Hxy Hni.
  move: Hv => /all_nthP.
  rewrite size_pairmap => /(_ true i Hi).
  rewrite (nth_pairmap dummy); last by [].
  by rewrite Hni Hxy => /eqP [] ->.
Qed.

Lemma no_cycle seg0 p : valid_path seg0 p -> next (last seg0 p) = None -> uniq (seg0 :: p).
Proof.
  elim: p seg0.
    by [].
  move=> seg1 p IH seg0 Hv Hnl.
  move: (valid_path_cons seg0 seg1 p Hv) => [] Hns0 {}Hv.
  specialize (IH seg1 Hv Hnl).
  rewrite cons_uniq IH andbT.
  apply/negP => Hin.
  move: (seg1) => dummy.
  move/nthP: Hin => /(_ dummy) [] i /=.
  rewrite leq_eqVlt => /orP [].
    rewrite eqSS => /eqP Hi.
    rewrite Hi nth_last /= => Hl.
    rewrite /= Hl in Hnl.
    suff: None = Some seg1; first by [].
    by rewrite -Hns0 -Hnl.
  change (size p).+1 with (size (seg1 :: p)).
  move=> Hi2 Hsi.
  suff: 0 == i.+1; first by [].
  have Hi1 : 0 < size (seg1 :: p).
    by [].
  rewrite -(nth_uniq dummy Hi1 Hi2 IH).
  rewrite (next_nth dummy seg1 seg0 seg1 p i Hv Hi2 Hns0 Hsi) /=.
  by rewrite eq_refl.
Qed.

End amida_kuji.


田中哲