Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Coqのコントリビューターになった話

soukouki
October 08, 2023

 Coqのコントリビューターになった話

2023-10-08 Zli 大LT 2023秋にて発表したスライドです。

soukouki

October 08, 2023
Tweet

More Decks by soukouki

Other Decks in Technology

Transcript

  1. 数学の証明はふつう自然言語と数式で書きますが、それをソフトウェアを通して検証 させ、「証明が正しいこと」を検証させる、というものです。 例えば、次の命題をCoqで検証させるには、次のように書きます。 Theorem subsets_cap A B X: X ⊂

    A -> X ⊂ B -> X ⊂ A ∩ B. Proof. move=> HXA HXB x HX. (* HXA: X ⊂ A, HXB: X ⊂ B, ∀x, HX: x ∈ X をコンテキストへ移動する *) split. (* x ∈ A ∩ B を x ∈ A と x ∈ B に場合分けして考える *) - by apply HXA. (* x ∈ A なら X ⊂ A より成り立つ *) - by apply HXB. (* x ∈ A なら X ⊂ B より成り立つ *) Qed. 6
  2. 集合の個数の形式化 こういうときは巨人の肩に乗るのが一番。標準ライブラリの実装を見てみます。 Inductive cardinal : Ensemble U -> nat ->

    Prop := | card_empty : cardinal (Empty_set U) 0 | card_add : forall (A:Ensemble U) (n:nat), cardinal A n -> forall x:U, ~ In U A x -> cardinal (Add U A x) (S n). cardinalの定義(数式) cardinalの定義だけではまともに扱えないので、それを補助する補題が必要です。 8
  3. card_soustr_1の標準ライブラリの証明 集合Xから要素xを取り除いた集合の個数は、Xの個数から1引いたものになる。 Lemma card_soustr_1 : forall (X:Ensemble U) (n:nat), cardinal

    U X n -> forall x:U, In U X x -> cardinal U (Subtract U X x) (pred n). Proof. intros X n H'; elim H'. - intros x H'0; elim H'0. - clear H' n X. intros X n H' H'0 x H'1 x0 H'2. elim (classic (In U X x0)). + intro H'4; rewrite (add_soustr_xy U X x x0). * elim (classic (x = x0)). -- intro H'5. absurd (In U X x0); auto with sets. rewrite <- H'5; auto with sets. -- intro H'3; try assumption. cut (S (pred n) = pred (S n)). ++ intro H'5; rewrite <- H'5. apply card_add; auto with sets. red; intro H'6; elim H'6. intros H'7 H'8; try assumption. elim H'1; auto with sets. ++ unfold pred at 2. apply (Nat.lt_succ_pred 0). apply inh_card_gt_O with (X := X); auto with sets. apply Inhabited_intro with (x := x0); auto with sets. * red; intro H'3. apply H'1. elim H'3; auto with sets. rewrite H'3; auto with sets. + elim (classic (x = x0)). * intro H'3; rewrite <- H'3. cut (Subtract U (Add U X x) x = X); auto with sets. intro H'4; rewrite H'4; auto with sets. * intros H'3 H'4; try assumption. absurd (In U (Add U X x) x0); auto with sets. red; intro H'5; try exact H'5. lapply (Add_inv U X x x0); tauto. Qed. 9
  4. 10

  5. 12

  6. 14

  7. 18

  8. 改善した補題 cardinal_is_functional card_Add_gen Union_preserves_Finite Finite_downward_closed cardinal_Empty cardinal_unicity inh_card_gt_O incl_card_le incl_st_card_lt(後でレビュワーからめっちゃ短い証明が来た)

    Generalized_induction_on_finite_sets(後でレビュワーからめっちゃ短い証明が来 た) 追加で10個の補題について証明を改善しました! 21