\documentclass[全部作业]{subfiles}
% \documentclass[a4paper]{ctexart}
\usepackage[margin=1in]{geometry} % 设置边距，符合Word设定
% \usepackage{ctex}
\usepackage{lipsum}
\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm}
% \usepackage{fontspec}
\usepackage{minted}
% \usepackage{shellesc}
% \usepackage{regexpatch}
% \usepackage{xpatch}
% \usepackage{l3regex}
\usepackage{expl3}
\usepackage{environ}
\usepackage{mylatex}
% \setmainfont{Microsoft YaHei}
% \setCJKmainfont{SimSun}
\date{2023年9月14日}
\begin{document}
\chapter{集合论基础}
\section{集合的概念和术语}

\renewcommand{\labelenumii}{(\arabic{enumii})}
\begin{enumerate}
    \item 
    给出集合{-3,-2,-1,0,1,2,3}的谓词表示法。

    $\{ x|x \in \mathbb{Z}, -3\le x\le 3 \}$
    \item 
    判断2和{2}是否下列集合的元素。

    \begin{enumerate}

    \item 

$\{ x| {x\text{是大于1的整数}} \}$

        2是， {2}不是。
    \item 

$\{ x|x {\text{是某整数的平方}} \}$

        2不是，{2}不是。
    \item 

$\{ 2,\{ 2 \} \}$

        2是，{2}是。
    \item 

$\{ \{ 2 \},\{ \{ 2 \} \} \}$

        2不是，{2}是。
    \item 

$\{ \{ 2 \},\{ 2,\{ 2 \} \} \}$

        2不是，{2}是。
    \item 

$\{ \{ \{ 2 \} \} \}$

        2不是，{2}不是。
\end{enumerate}

\item 
下列哪些命题成立？哪些不成立？为什么？
\begin{enumerate}
    \item 

$\emptyset \in \{ \emptyset,\{ \emptyset \} \}$

        成立。
    \item 

$\emptyset\subseteq \{ \emptyset,\{ \emptyset \} \} $

        成立。
    \item 

$\{ \emptyset \}\subseteq \{ \emptyset,\{ \emptyset \} \}$

        成立。
    \item 

$\{ \{ \emptyset \} \}\subseteq \{ \emptyset,\{ \emptyset \} \}$

        成立。
\end{enumerate}
\end{enumerate}

\section{集合的运算}
\renewcommand{\labelenumii}{(\arabic{enumii})}
\begin{enumerate}
    \item
设A是ECNU二年级学生的集合，B是ECNU必须学习离散数学的学生的集合。请用A和B表示ECNU不必学习离散数学的二年级的学生的集合。\\
    $A\setminus B$
    \item
设A是集合，下列命题是否必定成立?
\begin{enumerate}

\item
$A\in P(A)$\\
        是。
        \item
$A \subseteq P(A)$\\
        否。
        \item
$\{ A \}\in P(A)$\\
        否。
        \item
$\{ A \} \subseteq P(A)$\\
        是。
    \end{enumerate}
    \item
设A和B是任意集合，证明 $P(A)\cap P(B)=P(A\cap B)$。\\
\begin{proof}
\ExplSyntaxOn
\begin{zhongwen}
    $$
    \begin{aligned}
    证明：&\\
    &X \in P(A) \cap P(B)\\
    \Leftrightarrow &X \in P(A) 且 X \in P(B)\\
    \Leftrightarrow &X \subseteq A, X \subseteq B\\
    \Leftrightarrow &X \subseteq A \cap B\\
    \Leftrightarrow &X \in P(A \cap B)\\
    \therefore  &P(A)\cap P(B) = P(A\cap B)\\
    \end{aligned}
    $$
\end{zhongwen}
\ExplSyntaxOff
\end{proof}

    \item
设A是任意集合，$A^3=(A×A)×A=A×(A×A)$是否成立？为什么？\\
    \ExplSyntaxOn
    \begin{zhongwen}
        $不一定，假设A=\{ 1 \}，则A^3=\{ (1,1,1) \}, (A\times A)\times A=\{ ((1,1),1) \}, A\times (A\times A)=\{ (1,(1,1)) \}$
    \end{zhongwen}
    \ExplSyntaxOff
    
\item
设A、B、C和D是集合，证明：若A、B、C和D均非空集，且A×B=C×D，那么A=C且B=D。\\
% {\ctex@fontset{middle}} 

\begin{proof}
\ExplSyntaxOn
\begin{zhongwen}
    $$
    \begin{aligned}
    &假设 A \neq C 或 B \neq D\\
    &则\exists x, x \in A, x \notin C 或x \in C, x \notin A\\
    &或\exists y, y \in B, y \notin D 或y \in D, y \notin B\\
    &不妨设\exists x, x \in A, x \notin C\\
    &\because B 非空\\
    &\therefore 设b \in B\\
    &则(x,b) \in  A\times B\\
    &\because x \notin C\\
    &\therefore (x,b) \notin C\times D\\
    &\therefore A\times B \neq C \times D\\
    &与已知矛盾\\
    &\therefore 若A、B、C和D均非空集，且A×B=C×D，\\
    &那么A=C且B=D。\\
    \end{aligned}
    $$
    % \endbf
\end{zhongwen}
\ExplSyntaxOff
\end{proof}

\item    *编写一个程序，输入任意一个自然数n，输出P({1,2,…,n})的所有元素。 \\
    （JavaScript，Nodejs环境）
    \begin{minted}{javascript}
        const readline = require("readline");
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout,
        });
    
        let n;
    
        function get_pow_set(end_num) {
            end_num = parseInt(end_num);
            let pow_set = [[]];
            for (let i = 1; i <= end_num; i++) {
                pow_set = pow_set.concat(pow_set.map((ele) => {
                    return ele.concat([i]);
                }));
            }
            return pow_set;
        }
    
        rl.question("", (answer) => {
            n = parseInt(answer);
            console.log(get_pow_set(n));
            rl.close();
        });
        
    \end{minted}

\end{enumerate}

\end{document}